在异步函数中,我可以得到一个异步值,如下所示:
const foo = await myAsyncFunction()
如果我想在结果上调用一个方法,使用同步函数我会做像myAsyncFunction().somethingElse()
这样的事情
是否可以使用异步函数链接调用,或者是否必须为每个结果分配一个新变量?
您可以在表达式中等待,无需将其分配给新变量。
const foo = await (await myAsyncFunction()).somethingElseAsync()
或者,如果要在结果上调用sync方法:
const foo = (await myAsyncFunction()).somethingElseSync()
由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>