2017-02-11 2 views
0

getan Ich verwende den folgenden Codenode.js - Verschachtelung Anfrage, warten Sie, bis Anfrage Funktion

request(firstparams, function() { 
    var secondparams = { 
    // ****** 
    }; 

    request(secondparams, function() { 
     for (i=0; i<3; i++) { 
      var thirdparams = { 
      // ****** 
      }; 

      request(thirdparams, function() { 
       console.log('foo'); 
      }); 
     } 
     console.log('bar'); 
    }); 
}); 

und wollen wie das Ergebnis zu erhalten:

foo 
foo 
foo 
bar 

aber das Ergebnis ist:

bar 
foo 
foo 
foo 

Entschuldigung für mein schlechtes Englisch, wenn es etwas Zweideutigkeit gibt, würde ich mein Bestes versuchen zu erklären. Vielen Dank^^

+1

siehe http://stackoverflow.com/questions/5010288/how-to-make-a-function-wait-until-a-callback-has-been-called-using-node-js – Derlin

Antwort

0

Die einfache Art zu tun, was Sie wollen, wäre zu verwenden 'async' module, die das klassische Modul ist, asynchrone Probleme zu behandeln.

bis 3. Anrufe parallel und log ‚bar‘ nach jeder von ihnen laufen Sie so etwas wie dies tun würde, ist fertig:

const async = require('async'); 
 

 
let asyncFunctions = []; 
 
for (let i = 0; i < 3; i+= 1) { 
 
\t let thirdParams = {...}; 
 

 
\t asyncFunctions.push(function (callback) { 
 
\t \t request(thirdparams, function (err, data) { 
 
\t \t \t console.log('foo'); 
 
\t \t \t callback(err, data); 
 
\t \t }); 
 
\t }); 
 
} 
 

 
async.parallel(asyncFunctions, function (err, data) { 
 
\t console.log('bar'); 
 
});

Sie Rückrufe verwenden. Es gibt aber auch andere Möglichkeiten, die asynchrone Verarbeitung in node.js wie Versprechungen, Generatoren und Async/await-Funktionen von ES7 aus zu handhaben.

Ich denke, dass das für Sie nützlich sein kann, überprüfen Sie einige Artikel wie this one.

+0

danke Sie! es ist Arbeit! – viosey

Verwandte Themen