首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链异步函数

链异步函数
EN

Stack Overflow用户
提问于 2016-07-28 19:03:47
回答 3查看 23.9K关注 0票数 32

在异步函数中,我可以获得如下所示的异步值:

const foo = await myAsyncFunction()

如果我想对结果调用一个方法,使用一个同步函数,我会执行类似于myAsyncFunction().somethingElse()的操作

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-28 19:05:47

您可以在表达式中等待,不需要将其赋值给新变量。(尽管将它分配给一个变量可能更容易读)。

代码语言:javascript
复制
const foo = await (await myAsyncFunction()).somethingElseAsync()

或者,如果要对结果调用同步方法,则为:

代码语言:javascript
复制
const foo = (await myAsyncFunction()).somethingElseSync()
票数 48
EN

Stack Overflow用户

发布于 2021-05-22 14:35:51

你可以试试这个包裹。

代码语言:javascript
复制
// Instead of thens
fetch(url)
  .then(res => res.json())
  .then(json => json.foo.bar)
  .then(value => console.log(value))

// Instead of awaits
const res = await fetch(url)
const json = await res.json()
const value = json.foo.bar
console.log(value)

// With prochain
const value = await wrap(fetch(url)).json().foo.bar
console.log(value)
票数 4
EN

Stack Overflow用户

发布于 2018-06-21 14:38:17

这个答案由Tamas在await表达式周围加上括号,肯定是使用vanilla JavaScript的方法。

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

代码语言:javascript
复制
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
代码语言:javascript
复制
<script src="https://unpkg.com/async-af@7.0.11/index.js"></script>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38644754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档