关于javascript中async和promise的一个问题

发布于 2022-09-11 20:32:48 字数 342 浏览 19 评论 0

如下一段JS代码:

async function timeout() {
    return 'hello world'
}
timeout().then(result => {
    console.log(result);
})
console.log('虽然在后面,但是我先执行');

下面是运行结果:
图片描述

但是timeout()本身是在console.log()前面,虽然是异步,但又不用等,结果不是应该先输出“hello world”吗?

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

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

发布评论

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

评论(5

烟织青萝梦 2022-09-18 20:32:48

方法一

async function timeout() {
    return new Promise((resolve, reject) => {
        resolve('hello world')
    })
}
timeout().then(result => {
    console.log(result);
    
    console.log('虽然在后面,但是我先执行');
})

结果:
hello world
虽然在后面,但是我先执行

方法二

async function timeout() {
    return new Promise((resolve, reject) => {
        resolve('hello world')
    })
}

async getData() {
    let str = await timeout()
    console.log('虽然在后面,但是我先执行');
}

getData()

结果:
hello world
虽然在后面,但是我先执行
亚希 2022-09-18 20:32:48

这是宏任务和微任务的区别,async await promise这都属于微任务,微任务要等宏任务队列执行完成后才会执行。

在你的代码里面 timeout 是微任务,下面的console.log是宏任务。

苏佲洛 2022-09-18 20:32:48

微任务和宏任务 你可以看下。 宏任务执行完再执行微任务

孤单情人 2022-09-18 20:32:48

谢谢大家谢谢大家

温柔戏命师 2022-09-18 20:32:48

Promise/A+的规范问题,在Promise的实现里,有一点是,他会延时的运行你的then函数,不管你是Promise运行的是同步函数还是异步函数

const BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;

clipboard.png

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