【问题标题】:How to pass values wrapped in Promise into non-async function? [duplicate]如何将包装在 Promise 中的值传递给非异步函数? [复制]
【发布时间】:2018-10-31 18:17:01
【问题描述】:

在类方法中,我通过异步函数this.retrieveData() 检索了一些数据。此方法返回我打算将其传递给另一个名为 renderTemplate() 的函数的数据。

async getTemplateHtml() {
   const data = await this.retrieveData()
   const html = renderTemplate(`some html template`, {stuff: data}
   return html
}

然而,问题在于this.retrieveData() 实际上以Promise<string>[] 的形式返回了一个Promise 数组,而renderTemplate() 的签名是renderTemplate(string, {stuff: string[]}

我不能将 this.retrieveData() 返回的 data 直接传递给 renderTemplate() 的第二个参数,因为 data 中的元素仍然包装在 Promise 中。我也无法更改 renderTemplate() 函数的第二个参数,因为它来自 npm 库。

我怎样才能以某种方式解析 data 中的 Promises 中包装的值,以便我可以将其传递给 renderTemplate() 作为其从 Promise 中解包的实际值?

【问题讨论】:

  • const data = await Promise.all(this.retrieveData()) 是否符合您的意思?

标签: javascript typescript ecmascript-6 promise async-await


【解决方案1】:

如果retrieveData返回一个promise数组,它应该是:

const data = await Promise.all(this.retrieveData());

这会将一组承诺映射到一组值。

【讨论】:

  • 只是好奇,如果 retrieveData() 返回 Promise 会怎样?我还使用 Promise.all 吗?
  • 不,这将是 await this.retrieveData(),正如您最初建议的那样。
猜你喜欢
  • 2017-05-18
  • 2020-01-04
  • 2015-12-01
  • 2021-12-15
  • 2015-09-24
  • 1970-01-01
  • 2020-08-03
  • 2016-11-24
  • 2017-07-08
相关资源
最近更新 更多