2015-11-16 1 views
0

je le code suivant:node.js attend la fin du rappel?

  exported.removeWatcher(issueId, user, function(err, result) { 
       if (result.statusCode != 204) { // Build a list of failed issues 

       } else if (result.statusCode == 204) { 

       } 
       console.log(); 
      }); 

Je sais que l'utilisation callbacks est l'un des points forts de Node.js, mais pour mon cas d'utilisation, je veux attendre jusqu'à ce que je reçoive une réponse du rappel ci-dessus (c'est-à-dire ne pas exécuter le code plus loin à moins que le rappel ne soit déclenché.) Comment puis-je y parvenir?

+2

Est-il possible d'avoir plus exécution de code se produit de la fonction de rappel lui-même? –

+0

Vous pouvez utiliser des promesses;) –

+0

Essayer de bloquer le thread en cours jusqu'à ce qu'une condition soit satisfaite va à l'encontre de la conception principale de nodejs. Même si vous parvenez à le faire, il serait déconseillé et pourrait présenter des problèmes de sis. – Don

Répondre

0

Vous pouvez utiliser async.js. Il suffit de l'installer avec npm et de "l'exiger" dans votre code.

Par exemple:

async.series([ 
    function(callback) { 
    myWaitForThisFunction(callback); 
    }, 
    function(callback) { 
    myThenDoThisFunction(callback); 
    } 
]); 
+0

merci pour la suggestion, en lisant la documentation async.series, il dit que si l'une des fonctions rencontre une erreur, alors le reste ne sont pas appelés et le rappel principal est appelé. Pour mon utilisation, je veux toujours traiter toutes les fonctions même si l'une des fonctions avait une erreur. des idées sur la façon dont cela peut être fait en utilisant async? – Rookie

+0

il dit que si l'une des fonctions renvoie une erreur ne rencontre pas une erreur. Si vous gérez les erreurs avec try et catch blocks, dans votre bloc catch, vous pouvez appeler la fonction callback avec une autre valeur. Par exemple: try {do_something(); rappel (résultat); } catch (erreur) {console.log (erreur); callback (myNonErrorVariable); } –