javascript - 多个 Http 请求被调用并存储在一个数组中,但如何等到所有请求完成后再使用数组

标签 javascript node.js asynchronous

我有一个想要循环的值数组。这些值中的每一个都将用于向服务器发出 http 请求。我将从服务器收到每个请求的响应。我想将所有这些响应存储在一个数组中,然后在所有请求完成后对数组进行处理。由于我的代码的异步性质,我不确定如何使应用程序等待所有请求完成。发生的情况是我正在发出请求,但由于异步性质,我想要对数组执行的工作在所有请求完成之前就已经开始了。如何使此代码“同步”,因为它会等到所有请求完成后再开始使用 listOfResponses 数组进行工作

//import the require library to make http requests to a server
const request = require('request');

//values to be sent via a restful GET request 
const list = [
  'value_one',
  'value_two'
];

//store resoonses from GET request
var listOfResponses = [];

//loop through the list
list.forEach(function(word) {

  //Make a rest GET call to a server
  var url = 'http://notsurehowtomakethisworksoiamaskingstackoverflow.com/api/words/' + word;
  request(url, {
    json: true
  }, (err, res, body) => {
    if (err) {
      return console.log(err);
    }

    //store the response from the server into out array
    listOfResponses.push(body.response);
  });
});


/* ******************************* 
HERE I WANT TO DO STUFF WITH listOfResponses ONCE ALL THE REQUESTS FINISH
********************************** */

最佳答案

只需将其映射到一系列 promise :

  const promises = list.map(word => new Promise(resolve => {
   var url = 'http://notsurehowtomakethisworksoiamaskingstackoverflow.com/api/words/' + word;
   request(url, {
     json: true
   }, (err, res) => {
     if (err) {
       return reject(err);
     }   
     resolve(res.body);
   });
 }));

然后你可以使用Promise.all获取所有结果:

 Promise.all(promises).then(results => {
  //...
 });

关于javascript - 多个 Http 请求被调用并存储在一个数组中,但如何等到所有请求完成后再使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479975/

相关文章:

python - 何时以及如何使用 Tornado?什么时候没用?

Javascript 空字段无法正确验证

javascript - 在服务不工作的 Controller 之间传递数据

javascript - 在 <script> block 中转义 JavaScript 字符串文字中的 HTML 实体

javascript - 在文档数组 Mongoose 中获取精确的子文档

javascript - 循环中异步函数的最后一个值

ios - sendAsynchronousRequest 使 UI 卡住

javascript - jQuery UI 按钮 - 保持事件状态,忽略悬停状态

java - postgresql 序列相关问题 "id is getting repeated"?

c++ - 如何将 Node.js 解释器嵌入到 C/C++ 中?