setTimeout(function(){ console.log('setTimeout 1') },0); new Promise(resolve => { console.log('script end'); setTimeout(function() { resolve() }, 0) }).then(function () { console.log('promise resolve 1') }).then(function () { console.log('promise resolve 2') }); Promise.resolve().then(function () { console.log('promise resolve 3') }); console.log('script start')
时间: 2023-08-03 08:08:29 浏览: 189
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
这段代码的输出结果为:
```
script end
script start
promise resolve 3
setTimeout 1
promise resolve 1
promise resolve 2
```
首先,整个代码块会依次执行,输出`script end`和`script start`。然后,`Promise.resolve().then(function () { console.log('promise resolve 3') });`会被放入微任务队列中,等待当前宏任务执行完毕后执行。接着,`new Promise(resolve => { setTimeout(function() { resolve() }, 0) }).then(function () { console.log('promise resolve 1') }).then(function () { console.log('promise resolve 2') });`会被执行,其中的`setTimeout`会被放入宏任务队列中,等待当前宏任务执行完毕后执行。然后,第一个`then`会被放入微任务队列中,等待当前宏任务执行完毕后执行。接着,第二个`then`也会被放入微任务队列中,等待当前宏任务执行完毕后执行。最后,`setTimeout`中的回调函数会被放入宏任务队列中,等待当前宏任务执行完毕后执行。因此,输出的顺序为上面所示。
阅读全文