簡體   English   中英

NodeJ,承諾不等待

[英]NodeJs, Promises not waiting

我有這個功能,應該對一個網頁發出300個請求(用於基准測試),但是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是bluebird,而http是正常的http包

Promise正在回調中推入數組。 因此,到Promise.all調用時,array為空( []

在循環本身而不是callback中將new Promisenew Promise數組中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM