我有一个想要循环的值数组。这些值中的每一个都将用于向服务器发出 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/