JavaScript执行顺序

3

我有这段代码:

setTimeout(function timeout() {
    console.log('timeout');
}, 0);

let p = new Promise(function(resolve, reject) {
    console.log('create promise');
    resolve();
});

p.then(function(){
    console.log('execute promise');
});

console.log('end');

执行代码时,我得到了以下顺序:

  • 创建Promise
  • 结束
  • 执行Promise
  • 超时


问题:为什么create promise首先被执行?我期望先执行end,因为它是唯一的同步代码,所以应该首先执行。


2
在大多数实现中,Promise函数会立即调用。没有必要延迟其执行。 - Daniel A. White
@DanielA.White,那我理解正确,new Promise(...) 内的所有内容都是同步执行的吗? - Asking
2
是的-标准就是这么说的: https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-constructor - Daniel A. White
1个回答

1
Promise 构造函数中传递的回调函数会立即同步执行。但是,在 Promise 回调函数中启动一个异步任务是可能的。然后,Promise 会在异步任务完成后解析。这是 Promises 的主要用例。
在您的情况下,没有启动任何异步任务,因此您的所有代码都是同步的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接