关于Promise中执行顺序的诡异现象

var po = new Promise(function(res,rej){
    res(1);
    console.log(12)
    console.log(123)
}).then(function(data) {
    console.log(data);
})

结果是:
12
123
1

对于这个执行结果,有以下疑问:

为什么先输出12和123,再执行了res(1)?Promise中的回调是天然异步的么?(即使new Promise的参数明明是一个同步的函数)

阅读 3.9k
5 个回答

Promise.then是异步执行的,但是创建Promise实例是同步执行的,

可以去了解下,MacroTask(Task)MicroTask(Job) 的概念

新手上路,请多包涵

不是执行res,而是抛出res中的值在后续的then()中执行,你这边抛出的是1,所以在promise中代码依次运行完后 会将1抛出,then接受一个函数,这个函数中的参数data就是promise中抛出的值(你这边是1),所以1是被最后打出

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题