javascript - Promise的一點疑惑
为情所困
为情所困 2017-05-19 10:36:01
0
2
490
 var p = new Promise((resolve, reject) => {  
     //这里的参数若是thenable的,规范有提到加入job队列,必然是异步的
     //但是比如参数是数字,在返回promise之前,就已经修改了它的状态,这样似乎是同步的了
     resolve(3);
 });
 console.dir(p.[[state]]);

上面這段程式碼是同步的麼?即,如果有p.[[state]],那麼應該要印出fulfilled,而不是pendding

p.then方法裡面的回呼函數是異步的這個應該沒問題

为情所困
为情所困

全部回覆(2)
我想大声告诉你

這裡是同步的無疑。

曾经蜡笔没有小新

你的這段程式碼的確是同步的,有個簡單的辦法驗證

const p = new Promise((resolve, reject) => {
  console.log('in')
  resolve(3)
})
console.log(p)

看看上面的程式碼是不是先打出'in'?這就說明new Promise的resolve、reject執行是同步的,想變成非同步可以像下面這樣寫:

const p = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('in')
    resolve(3)
  }, 0)

})
console.log(p)

另外,then的執行的確是異步的,也可以用類似的方法驗證。

順帶一說,Promise有個常用的pattern,將同步結果包裝成Promise,消除同步和非同步呼叫的區別:

const addOne = num => Promise.resolve(num + 1)
const addOneAsync = num => new Promise(resolve => setTimeout(resolve(num + 1), 0))

addOne(1).then(n => console.log(n))
addOneAsync(1).then(n => console.log(n))
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板