如何等到回调完全完成

How to wait until a callback is fully finished?

本文关键字:回调      更新时间:2023-09-26

我有以下循环,发出 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);
    }
  });
}

你可以使用 Bluebird - 一个承诺库

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