NodeJs,诺言不等

我有这个function,应该使300请求一个网页(基准testing),但是Promise.all没有等待这些请求完成之前输出一个空的数组,任何想法?

function requestLoop(){ var resultSet= []; // options.requests = 300 // options.url = http://localhost/ for(var c=1;c<=options.requests; c++){ http.get(options.url, function(res){ // resultSet.push( { request: c, statusCode: res.statusCode}); resultSet.push(new Promise(function(res){ return { request: c, statusCode: res.statusCode}; })); }); } Promise.all(resultSet).then(function(){ console.log(resultSet); }); return; } 

Promise是蓝鸟,http是普通的http包

诺言正在callback中推动。 因此,当Promise.all调用时,数组是空的( []

在循环内部推入new Promise数组,而不是在callback

 function requestLoop() { var resultSet = []; for (var c = 1; c <= options.requests; c++) { (function(c) { resultSet.push(new Promise(function(resolve) { http.get(options.url, function(res) { resolve({ request: c, statusCode: res.statusCode }); }); })); })(c); } Promise.all(resultSet).then(function() { console.log(resultSet); }); }