2009-07-29 6 views
1

Je veux appeler fillContent alors appelé plus tard beginEditingQuestionralentir le code jusqu'à ce que la fonction ajax soit terminée?

fillContent(cid, "questions"); 
beginEditingQuestion(qid); 

Le problème est que je ne peux pas sonner beginEfitingQuestion jusqu'à ce que tous les ajax dans fillContent est fait. Existe-t-il un moyen élégant de retarder le code? La seule idée que je peux penser est de faire une fonction totalement nouvelle fillContentAndBeginEditingQuestion où je copie et colle fillContent dans la nouvelle fonction et dans l'appel ajax final ajouter dans beginEditingQuestion. Cela ne me semble pas très élégant, je veux réutiliser fillContent dans d'autres contextes. Que devrais-je faire?

Répondre

3

Vous pouvez faire en sorte que fillContent prenne un paramètre de rappel, et qu'il appelle le rappel lorsqu'il est terminé. Fondamentalement, vous ajouteriez simplement callback(); dans le corps de fillContent à la toute fin. De cette façon, vous pouvez écrire quelque chose comme ça, et ont la fonction passée exécutée à la fin:

fillContent (cid, "questions", function() { beginEditingQuestion (qid); }); 
0

On dirait que vous avez besoin de changer « fillContent » de sorte que l'un de ses paramètres est une fonction de rappel est invoqué lorsque l'AJAX revient.

3

Je ne pense pas que vous voulez "ralentir", mais plutôt que vous voulez attendre que quelque chose se termine avant que le prochain travail ne commence. Un modèle pour cela, utilisé dans de nombreuses langues, consiste à utiliser des événements.

Conceptuellement:

Vous enregistrez un intérêt pour un événement « DoneFillingContent », en disant s'il vous plaît appelez beginEditingQueue() lorsque l'événement arrive. FillContent a la responsabilité d'émettre un événement à toutes les parties intéressées. Il ne réalise pas ce que beginEditingQueue() fait, c'est juste un travail à faire à la fin.

Dans la version la plus simple du modèle, vous autorisez simplement une fonction de rappel.

Questions connexes