链异步功能

Ash*_*rlc 14 javascript async-await ecmascript-2017

在异步函数中,我可以得到一个异步值,如下所示:

const foo = await myAsyncFunction()

如果我想在结果上调用一个方法,使用同步函数我会做类似的事情 myAsyncFunction().somethingElse()

是否可以使用异步函数链接调用,或者是否必须为每个结果分配一个新变量?

Tam*_*dus 28

您可以在表达式中等待,无需将其分配给新变量.

const foo = await (await myAsyncFunction()).somethingElseAsync()
Run Code Online (Sandbox Code Playgroud)

或者,如果要在结果上调用sync方法:

const foo = (await myAsyncFunction()).somethingElseSync()
Run Code Online (Sandbox Code Playgroud)

  • 如果第一个方法是“sync”,第二个方法是“async”怎么办? (2认同)

FZs*_*FZs 15

我很惊讶它还没有被提及,但在没有额外变量的情况下实现这一点的最易读的方法可能是使用链.thenawait最后:

await myAsyncFunction()
  .then(res => res.somethingElse())
Run Code Online (Sandbox Code Playgroud)

请记住,与 Promise 一起await工作,但不能取代它们!

  • 我不会混合“await”和“then”,它们处于不同的抽象级别。 (2认同)