如何将包装在 Promise 中的值传递给非异步函数? [复制]

Posted

技术标签:

【中文标题】如何将包装在 Promise 中的值传递给非异步函数? [复制]【英文标题】:How to pass values wrapped in Promise into non-async function? [duplicate] 【发布时间】: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()) 是否符合您的意思? 【参考方案1】:

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

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

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

【讨论】:

只是好奇,如果 retrieveData() 返回 Promise 会怎样?我还使用 Promise.all 吗? 不,这将是 await this.retrieveData(),正如您最初建议的那样。

以上是关于如何将包装在 Promise 中的值传递给非异步函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

详解如何构建Promise队列实现异步函数顺序执行

将 View 从 setContentView 传递给非 Activity 类

将 promise 包装到 Sync 函数中

我如何访问这个 Promise 调用中的历史对象?

如何把 Callback 接口包装成 Promise 接口

RxJS Promise 组合(传递数据)