var p = new Promise((resolve, reject) => {
//这里的参数若是thenable的,规范有提到加入job队列,必然是异步的
//但是比如参数是数字,在返回promise之前,就已经修改了它的状态,这样似乎是同步的了
resolve(3);
});
console.dir(p.[[state]]);
上面這段程式碼是同步的麼?即,如果有p.[[state]]
,那麼應該要印出fulfilled
,而不是pendding
。
p.then
方法裡面的回呼函數是異步的這個應該沒問題
這裡是同步的無疑。
你的這段程式碼的確是同步的,有個簡單的辦法驗證
看看上面的程式碼是不是先打出'in'?這就說明new Promise的resolve、reject執行是同步的,想變成非同步可以像下面這樣寫:
另外,
then
的執行的確是異步的,也可以用類似的方法驗證。順帶一說,Promise有個常用的pattern,將同步結果包裝成Promise,消除同步和非同步呼叫的區別: