链异步功能

问题描述 投票:10回答:2

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

const foo = await myAsyncFunction()

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

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

javascript async-await ecmascript-2017
2个回答
27
投票

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

const foo = await (await myAsyncFunction()).somethingElseAsync()

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

const foo = (await myAsyncFunction()).somethingElseSync()

1
投票

由Tamas Hegedus组成的This answer以及围绕await表达式的括号绝对是使用vanilla JavaScript的方法。

或者,如果您正在寻找常见的链式JS方法,并且不介意第三方模块,您可以在npm上使用async-af。有了它,您可以链接异步方法,如下所示:

const promises = [1, 2, 3].map(n => Promise.resolve(n));

AsyncAF(promises).map(n => n * 2).filter(n => n !== 4).forEach(n => console.log(n));
// logs 2 then 6
<script src="https://unpkg.com/[email protected]/index.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.