使用多个es6映射并使其异步

时间:2017-06-09 07:01:53

标签: javascript reactjs ecmascript-6

const eventBarData = data.map(obj => prepareEventBar(obj.calendar))

const mapToSpaceData = eventBarData.map(obj => ({
  space_name: obj.space.display.name,
  ...obj
}))

以上代码不会起作用,因为它们同时运行?如何确保eventBarData完成处理然后运行另一个映射?我必须在地图中包裹地图吗?我不想在prepareEventBar函数中使用回调。

1 个答案:

答案 0 :(得分:1)

prepareEventBar返回Promise。然后你可以使用Promise.all

const eventBarDataPromises = data.map(obj => prepareEventBar(obj.calendar))

Promise.all(eventBarDataPromises)
  .then(eventBarData => eventBarData.map(obj => ...))
  .then(mapToSpaceData => ...

或者,如果您的环境支持它或您正在使用转换器,async function可能会更清洁:

// this code must be wrapped in an async function
const eventBarData = await Promise.all(
  data.map(obj => prepareEventBar(obj.calendar))
);

const mapToSpaceData = eventBarData.map(obj => ...);