Je travaille sur une extension Mozilla et j'ai un problème lorsque je fais des appels n à une fonction asynchrone, cette fonction est hors de mon contrôle et elle exécute un rappel à la fin. Dans ce rappel, je dois effectuer une action spéciale s'il s'agit du dernier rappel &. Je ne sais pas comment déterminer si un rappel est le dernier, j'ai pensé à mettre un compteur et à le décrémenter à chaque fois, mais en raison de la boucle imbriquée, je ne sais pas combien d'appels asynchrones seront faits (sans le faire à l'avance, ce qui serait inefficace). Des idées sur une approche élégante à cela?Suivre les appels asynchrones
function dataCallBack(mHdr, mimeData)
{
// ... Do stuff ...
// Was this the final callback?
}
function getData() {
var secSize = secList.length;
for (var i = 0; i < secSize; i++) {
if (secList[i].shares.length >= secList[i].t) {
var hdrCount = secList[i].hdrArray.length;
for(var j = 0; j < hdrCount; j++)
{
// MAKE ASYNC CALL HERE
mozillaFunction(secList[i].hdrArray[j], this, dataCallBack);
}
}
}
}
Merci.
merci. Cela semble bon, mais est-il possible qu'un rappel puisse être exécuté avant la prochaine itération de la boucle? c.-à-d. créer callback -> callback exécuté -> is_final, avant la prochaine itération de la boucle. Ou est-il garanti que requestsWaiting restera> 0 jusqu'à la dernière fonction appelée dans la boucle? –
@Jason Gooner - Oui, vous pouvez envelopper le si dans un 'setTimeout (function() {' ... '}, 0);' pour lutter contre cela, va modifier dans quand pas sur mon téléphone :) – gnarf