鍍金池/ 問答/HTML/ promise 執(zhí)行順序

promise 執(zhí)行順序

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')

運行結(jié)果是 main-1
main-2
promise-1
promise-2
main-3
then-1

為什么main-3 會在promise運行之后

回答
編輯回答
瘋浪

promise 異步是指的 then()方法,而不是指它的構(gòu)造函數(shù)執(zhí)行。詳細(xì)可以參考 Promise

建議樓主好好看下這篇文章,可以更加了解JavaScript里的事件機(jī)制

2018年8月3日 13:19
編輯回答
巴扎嘿

Promise構(gòu)造函數(shù)是同步執(zhí)行的,resolve()/reject()后的代碼也會執(zhí)行。Promise.then()中的函數(shù)是異步執(zhí)行的

2017年3月31日 13:06
編輯回答
青檸

因為Promise內(nèi)部除了resolve和reject外,都是同步的。也就是說Promise內(nèi)執(zhí)行順序是這樣
**先console.log('promise-1');
**然后碰到了resolve,異步的,跳過等待執(zhí)行。
**然后同步往下執(zhí)行下去,好碰到了console.log('promise-2'),執(zhí)行。
**ok同步的代碼執(zhí)行完了,Promise結(jié)束。
**然后往下執(zhí)行,console.log('main-3'),執(zhí)行完這個console后,ok同步的代碼又執(zhí)行完了。
**執(zhí)行Promise里的異步代碼,也就是resolve,console.log('then-1');
異步代碼是等待一段時間再執(zhí)行的,與此同時,同步代碼不會停止執(zhí)行會一直往下走

2018年8月4日 07:50