2017-02-11 88 views
0

我用下面的代碼的Node.js - 築巢的要求,等到請求函數完成

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'); 
    }); 
}); 

,並希望得到這樣的結果:

foo 
foo 
foo 
bar 

但結果是:

bar 
foo 
foo 
foo 

對不起,我的英語不好,如果有什麼不明確的地方,我會盡我所能解釋。非常感謝^^

+1

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

回答

0

簡單的做你想做的事情的方法是使用'async' module這是古典模塊來處理異步問題。

並行運行3次電話和他們每個人的完成,你會做這樣的事情後登錄「欄」:

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'); 
 
});

您正在使用回調。但是也有其他方法可以處理node.js中的異步,例如:來自ES7的promise,generator和async/await函數。

我認爲這可能對您有用,請查看一些文章,如this one

+0

謝謝您!是工作! – viosey