关于async/await的一些疑问?

发布于 2022-09-11 19:52:53 字数 212 浏览 21 评论 0

感觉用了这个语法就变成同步操作了额,那和普通的同步操作有什么区别吗?
还有就是我在一个函数里调用async函数,那么这个函数就得加上async,这么循环下去不会形成死循环吗?

async a(){};
async b(){
    let b = await a()
};
async c(){
    let c = await b()
};
...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

ぺ禁宫浮华殁 2022-09-18 19:52:53

不是调用async函数就得加上async,而是使用了await的函数必须加上async,如果你调用async函数不加上await,就不用加async。

async函数只是看起来像是同步,其实不是同步,async从来不等待里面的await完成才返回,它会立刻返回,只是它返回的是Promise对象,而不是声明中的返回值类型。

但async函数内部代码执行顺序是和同步一样的,await之后的代码会在await语句之后才执行。

番薯 2022-09-18 19:52:53

这个问题也困扰我好久了。好像得层层 async await 不然中间断了一个就返回 Promise 了,头大

分分钟 2022-09-18 19:52:53

区别就是,async/await 还是异步操作,只是写法看上去像同步。
题主可以看看这篇文章,对于异步流程控制的发展讲得比较详细:
https://mrluo.life/article/de...

你的笑 2022-09-18 19:52:53

await 是用同步的形式写异步程序,形式是同步,但是程序是异步执行的,这就是和同步程序的区别。

至于 asyncawait 的无限循环,我在理解 JavaScript 的 async/await 应该是解释清楚了的

顺便提一下,新的 JavaScript 标准好像会允许在顶层代码中使用 await,这相当于启动程序直接支持异步,从本质上来说并没有什么新奇之处

逆夏时光 2022-09-18 19:52:53

一步一await自然和同步没什么多大区别,但是你完全可以让支持异步的代码同时执行啊

async function a(num){return new Promise(resolve=>setTimeout(()=>resolve(num+1), 1000));};
async function b(num){
    return await a(num);
};
async function c(){
    let t1 = a(1);
    let t2 = b(2);
    let c = await t1 + await t2;
    return c;
};
c().then(d=>console.log(d))

这样只需要等待1秒就可以了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文