是否可以在单个等待下对独立的异步功能进行分组?

时间:2018-02-15 16:10:32

标签: javascript async-await

背景

我正在写一些异步代码。在我的一个终点中,我需要从firebase中检索一些数据以获取2个单独的内容。

  • 一个发布一些数据
  • 另一个检索要在计算中使用的一些数据和另一个帖子。

这两个步骤并不依赖于彼此,但显然应该返回的最终结果是(只是成功消息以验证所有内容都已正确发布)。

示例代码

postData

在上面的代码retrieveUnrelatedData中,即使其他步骤(postCalculatedData& postData)不需要等待{{1}的结果,也会阻止该过程中的其他步骤1}}。

问题

在返回完整的retrieveUnrelatedData承诺之前,是否有更有效的方式让postData触发?

1 个答案:

答案 0 :(得分:2)

是的,当然!您需要知道的是async / await正在使用Promises作为其基础技术。记住这一点,请按照以下方式进行:

const myWorkload = request => Promise.all([
  postData(request),
  calculateData(request)
])

const calculateData = async request => {
  const data = await retrieveUnrelatedData(request);
  const result = calculation(data);
  return await postCalculatedData(result);
}

// Not asked for, but if you had a parent handler calling these it would look like:
const mainHandler = async (req, res) => {
  const [postStatus, calculatedData] = await myWorkload(req)
  // respond back with whatever?
}