Заполнение запроса обещают URI с помощью для индекса цикла - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть серия запросов, которые я хотел бы вызвать в цикле for.

Единственное, что я изменяю в конечной точке, это параметр индекса. Этот параметр индекса должен совпадать с индексом цикла for (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, но объект значений был заполнен только одним конкретным ответом на запрос несколько раз.

[{ index: 70, data: '...' },
{ index: 70, data: '...' },
...
{ index: 70, data: '...' },
{ index: 70, data: '...'} ]

Как мне получить правильные ответы?

1 Ответ

0 голосов
/ 09 ноября 2018

Вы должны использовать async await в этом цикле. Вы должны также изучить закрытие и другие концепции.

Вы получаете тот же самый индексный ответ, потому что вы не ждете каждого ответа.

Исследуйте асинхронное ожидание.

SomeLinks:

Использование async / await с циклом forEach

https://dev.to/kayis/await-your-loops-680

https://medium.com/@antonioval/making-array-iteration-easy-when-using-async-await-6315c3225838

...