Comment attendre pour la fonction avant la fin de la continuning à Node.js
Je suis en train de créer un parcours dans le Nœud.js/Express qui lit les données à partir de deux requêtes, puis incrémente un compteur basés sur les données recueillies à partir de la queires. Depuis Node.js est asynchrone mon total est affiché avant que toutes les données ont été lues.
J'ai créé un exemple simple qui arrive au point de ce que je suis en train de faire
var express = require('express');
var router = express.Router();
var total = 0;
/* GET home page. */
router.get('/', function(req, res, next) {
increment(3);
increment(2);
console.log(total);
res.end();
});
var increment = function(n){
//Wait for n seconds before incrementing total n times
setTimeout(function(){
for(i = 0; i < n; i++){
total++;
}
}, n *1000);
};
module.exports = router;
Je ne suis pas sûr de ce que j'aurais à faire pour attendre jusqu'à ce que les deux fonctions de finition avant que je imprimer le total. Je dois créer un Événement personnalisé Émetteur pour y parvenir?
Vous passez des rappels. Un événement émetteur marcherait aussi bien. Ou promesses. De réflexion sur la question de l'obligation de "patienter" jusqu'à ce que quelque chose est fait est mal. Vous devrait plutôt penser à cela comme "comment puis-je savoir quand X est fait pour Y exécuter". Et des rappels, des événements ou des promesses sont autant de solutions pour ce problème.
OriginalL'auteur dfann | 2015-03-04
Vous devez vous connecter pour publier un commentaire.
Embrasser l'asynchronicité:
Ou utiliser une des promesses de la bibliothèque, ou utiliser les événements. En fin de compte, ils sont tous rappel asynchrone avec des mécanismes de légèrement différent de la sémantique.
OriginalL'auteur T.J. Crowder
Vous pouvez utiliser une bibliothèque comme async.
Voici le code:
OriginalL'auteur BlackMamba