我有一系列要在for循环中调用的请求。
我在端点中唯一要更改的是索引参数。该索引参数应与for-loop(0-100)的索引相同。
但是,承诺返回值都是来自端点之一的相同响应。 (即所有返回值都是我希望从$ {someEndPoint}?index = 61获得的返回值)。
someIndex = 100
var promises = [];
for (var i = 0; i < someIndex; i++){
var options = {
method: 'GET',
uri: `${someEndPoint}?index=${i}`,
json: true
}
promises.push(request(options))
}
Promise.all(promises).then(function(values){
console.log(values) // returns array of 100 of the same responses.
}).catch(e => {
console.log(e)
});
P.S。我使用的是node.js服务器,它表明我的服务器已经进行了全部100次正确的GET调用,但是values对象仅多次填充了一个特定的请求响应。
[{ index: 70, data: '...' },
{ index: 70, data: '...' },
...
{ index: 70, data: '...' },
{ index: 70, data: '...'} ]
我应该如何获得正确的答复?
答案 0 :(得分:0)
您应在此循环中使用异步等待。您还应该探索闭包和其他概念。
您将获得相同的索引响应,因为您没有等待每个响应。
探索异步等待状态。
SomeLinks:
Using async/await with a forEach loop
https://dev.to/kayis/await-your-loops-680
https://medium.com/@antonioval/making-array-iteration-easy-when-using-async-await-6315c3225838