Как запустить fetch () в цикле? - PullRequest
0 голосов
/ 05 июня 2019

Я новичок в nodejs и запрос на основе обещаний. Я хочу извлечь данные с удаленного сервера в цикле, а затем создать объект JSON из всех извлеченных данных.

const fetch = require('node-fetch');
const users = [];

const ids = await fetch('https://remote-server.com/ids.json');
console.log(ids);
// [1,2,3]

ids.forEach(id => {
    var user = await fetch(`https://remote-server.com/user/${id}.json`);
    users.push(user);
});

console.log(users);

ожидаемый результат

    [
        {
            name: 'user 1',
            city: 'abc'
        },
        {
            name: 'user 2',
            city: 'pqr'
        },
        {
            name: 'user 3',
            city: 'xyz'
        }
    ]

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Таким образом, чтобы запустить параллельно:

const ids = await fetch('https://remote-server.com/ids.json');
const userPromises = ids.map(id => fetch(`https://remote-server.com/user/${id}.json`));
const users = await Promise.all(userPromises);

, чтобы запустить в последовательности:

const users = [];
const ids = await fetch('https://remote-server.com/ids.json');
for(const id of ids){
    const user = await fetch(`https://remote-server.com/user/${id}.json`);
    users.push(user);
}
0 голосов
/ 05 июня 2019

Вы забыли добавить async в forEach:

ids.forEach(async (id) => { // your promise is in another function now, so you must specify async to use await
    var user = await fetch(`https://remote-server.com/user/${id}.json`);
    users.push(user);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...