Promise.resolve 注意事項
Promise.resolve 雖然照字面上解釋會傳回一個已經實現承諾 (fullfilled) 的 Promise 物件, 可是如果傳入的引數本來就是 Promise 物件, 就會原封不動傳回來, 請看以下的範例:
p = new Promise((r, e) => {
e(22);
});
q = Promise.resolve(p);
console.log(p===q);
q.then(r=>console.log("r:" + r), e=>console.log("e:" + e));
執行後會看到如下的結果:
true
e:22
第一個 true 表示 Promise.resolve 傳回的就是原本的 Promise 物件 p, 而且會執行 then 中的錯誤處理函式, 因此, 印出 "e:22"。如果不瞭解這一點, 就會覺得很奇怪, 已經實現承諾了, 為什麼還會執行錯誤處理函式。
這和 then/catch 的處理是不一樣的, then/catch 一定會傳回新的 Promise 物件, 並依照文件上的規則設定。
Top comments (0)