如何等待callback完成?

我有以下10个请求的循环。 console.log将从1到10打印。如何修改此代码以仅打印出人员peopleProfile (10)的最终长度?

 for (var i = 0; i < 10; i++) { request(URL, function(err, response, body) { if (err) { console.log(err); } if (!err && response.statusCode == 200) { peopleProfile.push(body); console.log(peopleProfile.length); } }); } 

你可以使用蓝鸟 – 这是一个承诺库

 var promises = []; for (var i = 0; i < 10; ++i) { promises.push(requestAsync(url)); } Promise.all(promises).then(function() { console.log("print this after finishing 10 requests"); }); 

有没有理由不能这样做?

 var completedRequests = 0; for (var i = 0; i < 10; i++) { request(URL, function(err, response, body) { completedRequests++; if (err) { console.log(err); } if (!err && response.statusCode == 200) { peopleProfile.push(body); if (completedRequests === 10) { console.log(peopleProfile.length); } } }); }