Partage
  • Partager sur Facebook
  • Partager sur Twitter

Attendre la fin d'un traitement pour continuer

    30 novembre 2010 à 15:58:40

    Bonjour à tous !

    Voilà, j'ai une question qui me bloque dans mon développement.

    Je fais un boucle et à chaque tour, un element est traité par une fonction.
    Le problème est que parfois, cet élément est traité trop lentement et donc, l'élément d'après est traité avant.
    C'est un peu compliqué à comprendre mais bon :D

    En gros :

    for (i=0; i<monTableau.length; i++) {
        maFonction(monTableau[i]);
    }
    


    Comment faire pour que le script attende que maFonction ait fini de travailler pour passer à i++ et donc continuer la boucle ?

    Merci beaucoup !

    PS j'avais pensé au setTimeout mais je suis pas sur.
    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2010 à 16:31:29

      Tout dépend de ce que contient maFonction().

      Je suppose qu'elle travaille donc d'une manière ou d'une autre en asynchrone (sinon le problème ne se poserait pas...). Il serait donc intéressant d'en connaître le code.
      • Partager sur Facebook
      • Partager sur Twitter
        30 novembre 2010 à 16:41:25

        C'est une fonction très lourde, ça me serait impossible de la réécrire ici.
        En gros, ça fabrique une fenêtre (d'un bureau virtuel) et c'est donc très long à s'exécuter quand les fenêtres sont lourdes et plus rapide quand elles sont légères.

        Le problème c'est qu'un ordre est défini donc, si le script continue sans avoir attendu la fin de création de la fenêtre, mon ordre qui est défini pète complètement et ça va pas !

        Faudrait donc que je puisse faire attendre ma boucle à chaque fois qu'il passe dans la fonction jusqu'à ce que ça soit OK.

        Si vous avez une solution...
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2010 à 16:48:17

          Bien sûr que si, tu peux la réécrire ici... o_O

          Utilise les balises secret du zCode pour limiter la taille, c'tout :

          <secret cache="1">
          <code type="javascript">
          /* Ici le code de ta fonction */
          </code>
          </secret>
          



          Si vraiment le formulaire rejette ton message parce qu'il est trop long, donne un lien vers ton code, via par exemple http://pastebin.com/


          Dans tous les cas, il nous faut le code pour pouvoir t'aider...
          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2010 à 16:51:31

            C'est une application avec 150 000lignes de code basée sous extJS avec un bureau virtuel.
            Mes fonctions en appellent d'autres etc...

            La seule chose qu'il me faut savoir, c'est :

            Est-il possible de dire à ma boucle d'attendre un résultat de la fonction avant de continuer ?
            Est-ce qu'au pire je peux mettre un setTimeout ?
            • Partager sur Facebook
            • Partager sur Twitter
              30 novembre 2010 à 17:16:04

              Non et non.

              La seule solution que tu peux apporter, c'est trouver quelle est la fonction asynchrone qui fait foirer ta boucle et utiliser un mécanisme de callback (certainement proposé par cette fonction) pour faire, à la place d'une boucle, une récursion.
              • Partager sur Facebook
              • Partager sur Twitter

              Attendre la fin d'un traitement pour continuer

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown