2017-04-21 153 views
1

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

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; 

} 

无极是蓝鸟和http是正常的HTTP包

+2

的[可能的复制如何返回从一个异步调用的响应?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+1

您正在callback中创建承诺。当'Promise.all(resultSet )'执行的非承诺被创建。 –

+0

我不同意,我没有使用AJAX,并且该问题仅涉及单个请求,我正在尝试使用多个并将结果放在一起。 – B1scuit

回答

4

无极被推在阵列中的回调。因此,到时候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); 
    }); 
}