【问题标题】:Use the result of an async API call inside a forEach在 forEach 中使用异步 API 调用的结果
【发布时间】:2020-07-06 23:11:46
【问题描述】:

我正在调用一个返回用户列表的 API,如下所示:

const users = await axios.get('/api/users/all');

res.data 现在是我的用户数组,每个用户都有一个名为 manager 的字段,它是来自另一个 Schema 的经理的 id 我有另一个 API 会在提供他们的 ID 时返回经理名称

axios.get('/api/managers/managerName', id)

我想运行一个 forEach 将经理姓名插入到我的结果中,而不是他的 ID。 我在努力

const users= await axios.get('/api/users/all');
const final = users.data.forEach(function (element) {
      element.managerName= axios.get('/api/managers/managerName', element.id);
    });

但这当然行不通,因为axios.get('/api/managers/managerName', element.id) 返回了一个承诺。 我怎样才能解决这个问题?谢谢

【问题讨论】:

    标签: javascript api axios


    【解决方案1】:

    据我所知,您不能在forEachmap 中使用await。它不起作用(不等待)。您必须使用for 循环。

    for( let element of users.data) {
        element.managerName = await axios.get('/api/managers/managerName', element.id);
    }
    

    【讨论】:

    • 这很好用,但是当我应该只使用名称来填充 element.managerName 时,api 返回一个带有 id 和名称的结果,有没有办法解决这个问题?将 .data.name 放在 get 后不起作用非常感谢!
    • 我让我的 api 只返回名称,但等待的结果仍然放在 data
    • 非常感谢!!!我有 forEach 循环并在里面使用 await 并给了我一个错误:await 只能在 async 块中使用但是在转换为这个不再错误之后,await 可以按预期工作。 (但是包含循环的函数是 async 的类型)
    【解决方案2】:
    const users= await axios.get('/api/users/all');
    const final = Promise.all(
    users.data.map(async (element) => {
          element.managerName = await axios.get('/api/managers/managerName', element.id);
        }));
    

    【讨论】:

    • 谢谢!当我console.log(final) 运行这个我得到承诺
    • 把 await 放在 Promise.all 之前
    【解决方案3】:

    你可以解决你的第二个承诺:

    const final = users.data.forEach(async function (element) {
          element.managerName= await axios.get('/api/managers/managerName', element.id).then((manager) => manager.name);
        });
    

    【讨论】:

    • 异步函数(元素) - forEach 中的函数也应该是异步的
    • 除非我弄错了,否则您不能在forEach 中使用await。它不起作用(不等待)。您必须使用for 循环。
    • 你不能把 await 放在 forEach 里面 :(
    猜你喜欢
    • 2013-04-24
    • 2019-03-24
    • 1970-01-01
    • 2013-09-27
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多