在forEach中使用异步API调用的结果

时间:2020-07-06 14:59:52

标签: javascript api axios

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

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

res.data现在是我的用户的数组,每个用户都有一个名为manager的字段,该字段是另一个模式中的manager的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)返回了一个承诺。 我怎样才能解决这个问题?谢谢

3 个答案:

答案 0 :(得分:2)

据我所知,您不能在 var ss = SpreadsheetApp.openByUrl(mySheetURL); var sheet = ss.getSheets()[0]; var cellRange = 'C2:C6' var ques = sheet.getRange(cellRange).getValues(); var newForm = FormApp.openByUrl(myformURL); var QOD = newForm.addMultipleChoiceItem(); QOD.setTitle(ques); await内使用forEach。它不起作用(不等待)。您必须使用map循环。

for

答案 1 :(得分:1)

您可以解决第二个承诺:

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

答案 2 :(得分:1)

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