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

标签 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 完成处理然后运行另一个 map ?我必须将 map 包裹在 map 中吗?我不想在prepareEventBar函数中使用回调。

最佳答案

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 => ...);

关于javascript - 使用多个 es6 映射并使其异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44451356/

相关文章:

javascript - 合并两个对象,但明确定义可以设置的键

javascript - 在 javascript 中 sleep (或等效)

javascript - Jquery if 语句、选择器

json - 如何使用ReactJs将json数据显示为表格

javascript - module.exports 中 "this"的范围

javascript - 与 es6 类和 jquery 绑定(bind)

javascript - Vue.js - 在单个文件组件中使用子组件

javascript - JavaScript 中的对象字面量。如何访问对象的引用 "prop s"?

javascript - 在 Three.js 中从缓冲区(而不是路径)加载 STL

javascript - 编译TypeScript时如何处理外部模块?