使用for循环索引填充请求promise uri

时间:2018-11-09 06:45:22

标签: javascript node.js promise request request-promise

我有一系列要在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: '...'} ]

我应该如何获得正确的答复?

1 个答案:

答案 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