【问题标题】:Await for an async function等待异步函数
【发布时间】:2017-06-18 17:19:39
【问题描述】:

有没有办法等待异步函数?像yield*(带有星号)这样的东西将委托给另一个生成器函数。

例如:

asyncFunction1 = async () => {
    await promise1;
    await promise2;
}

asyncFunction2 = async () => {
    await asyncFunction1(); // can we do that or it MUST be a promise?
}

【问题讨论】:

  • 它应该像你写的那样工作:jsfiddle demo。还是我误解了什么?
  • 我没有意识到异步函数会返回一个承诺。所以是的,它应该因此而工作!

标签: javascript async-await


【解决方案1】:

标记函数async 使其隐式返回一个承诺:

当调用async 函数时,它返回一个Promise。当async 函数返回一个值时,Promise 将使用返回值解析。当async 函数抛出异常或某个值时,Promise 将被抛出的值拒绝。

(source)

换句话说,您可以在异步函数上await,即使该函数返回非 Promise 值(因为该值将自动用 Promise 包装):

async function test() {
  return 123;
}

void async function() {
  let value = await test();
  console.log('value', value);
}();

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2018-04-23
    • 2019-06-16
    • 2018-02-03
    相关资源
    最近更新 更多