首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中使用异步API调用作为值来构建对象

如何在Javascript中使用异步API调用作为值来构建对象
EN

Stack Overflow用户
提问于 2019-05-15 02:08:06
回答 1查看 36关注 0票数 0

再一次,异步正在踢我的臀部。问题:我有一个配置文件,我必须基于它来构建一个多级对象,例如:

代码语言:javascript
复制
export const personnelTasks = {
  manager: {
    administrative: ['meetings', 'evaluation', 'time-reporting', 'vacation-approval'],
    operational: ['budgeting', 'supervising', 'customer-complaints']
  },
  frontDesk: {
    administrative: ['time-tracking', 'file-reports', 'cash-reporting', 'take_on', 'dribble'],
    operational: ['answer-calls', 'face-to-face-meetings', 'cash-counting', 'process-requests']
  }
};

因此,根据员工是经理还是前台员工,我将有一个包含两个选项卡的报告:administrativeoperational,以及他们必须执行的各种任务。对于其中的每一个,后端都会返回一系列数据,但这些数据来自不同的API端点。例如,对于会议,我有一个API端点{DEV_API}/meetings等。

我想要做的是一次调用所有API端点,并为每种类型的employee构建一个对象,如下所示:

代码语言:javascript
复制
const timeTrackingData = {
  administrative: {
    meetings: {...}
    evaluation: {...}
    .....
  },
  operational: {
    budgeting: {...},
    supervising: {...}
    .....
  }
}

我的解决方案是使用configuration对象并基于它构建新对象,对于每个键,使用async/ await调用来调用API。

代码语言:javascript
复制
getTimeTrackingData (employeeID, employeeType) {
    const timeTrackingDataObject = {};
    Object.keys(personnelTasks[employeeType]).forEach((taskCategory) => {
      timeTrackingDataObject[taskCategory] = {};
      personnelTasks[employeeType][taskCategory].forEach(async (task) => {
        timeTrackingDataObject[taskCategory][task] = {};
        timeTrackingDataObject[taskCategory][task] = await axios.get(`${DEV_API}/employees/${employeeId}/time-tracking/${task}`);
      });
    });

    return timeTrackingDataObject;
  },

因此,当我访问timeTrackingObject时,我可以看到对象的第一层,但在下面我看到了我无法访问的可观察对象。此外,我严重怀疑forEach循环和async/await是不是可行的方法,但我只想解决这个问题,然后考虑更好/更高效的实现。

EN

回答 1

Stack Overflow用户

发布于 2019-05-15 02:25:30

一种方法是:

代码语言:javascript
复制
Object.keys(personnelTasks[employeeType]).map(
    taskCategory => personnelTasks[employeeType][taskCategory].map(
        task => axios.get(`${DEV_API}/employees/${employeeId}/time-tracking/${task}`)
    )
)

你有一个二维数组,里面有未解析的承诺。您必须使用promise.all处理此数组,然后构建对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56136189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档