2017-04-21 17 views
1

Webページ(ベンチマーク用)に対して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

+2

可能な複製?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+1

コールバックで約束を作成しています.' Promise.all(resultSet ) 'が約束されていないと実行された。 –

+0

私はAJAXを使用していないと同意しません。その質問は単一のリクエストのみを指しています。私は複数を作って結果をまとめようとしています。 – B1scuit

答えて

4

プロミスコールバックにアレイ状に押されている通常のHTTPパッケージです。したがって、時間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); 
    }); 
} 
私は非同期呼び出しからの応答を返すにはどうすればよい[の
関連する問題