0

如下一段JS代码:

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

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

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

寅春树 641
6月19日提问
5 个回答
0

已采纳
方法一
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
虽然在后面,但是我先执行
0

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

0

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

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

0

谢谢大家谢谢大家

0

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

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

clipboard.png

撰写答案

推广链接