promise 执行顺序

console.log('main-1')

function foo(param){
  var p = new Promise(function(resolve, reject) {
    console.log('promise-1')

    if (param === 1) {
      resolve('1')
    } else {
      reject('2')
    }

    console.log('promise-2')
  })

  return p
}

console.log('main-2')

foo(1).then(function(value) {
  console.log('then-1')
})

console.log('main-3')

运行结果是 main-1
main-2
promise-1
promise-2
main-3
then-1

为什么main-3 会在promise运行之后

阅读 4k
4 个回答

promise 异步是指的 then()方法,而不是指它的构造函数执行。详细可以参考 Promise

建议楼主好好看下这篇文章,可以更加了解JavaScript里的事件机制

Promise创建即执行,可以看作是同步执行。

因为Promise内部除了resolve和reject外,都是同步的。也就是说Promise内执行顺序是这样
**先console.log('promise-1');
**然后碰到了resolve,异步的,跳过等待执行。
**然后同步往下执行下去,好碰到了console.log('promise-2'),执行。
**ok同步的代码执行完了,Promise结束。
**然后往下执行,console.log('main-3'),执行完这个console后,ok同步的代码又执行完了。
**执行Promise里的异步代码,也就是resolve,console.log('then-1');
异步代码是等待一段时间再执行的,与此同时,同步代码不会停止执行会一直往下走

Promise构造函数是同步执行的,resolve()/reject()后的代码也会执行。Promise.then()中的函数是异步执行的

推荐问题
宣传栏