如何在循环中运行fetch()?

时间:2019-06-05 10:39:49

标签: javascript asynchronous async-await

我对Node.js和Promise基于请求是陌生的。我想循环从远程服务器获取数据,然后从所有获取的数据创建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 个答案:

答案 0 :(得分:1)

因此要并行启动:

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);
}

答案 1 :(得分:-1)

您忘记在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);
});