首先看看原生Promise有哪些功能: 支持同步和非同步 一個實例的狀態只能變更一次 支持鏈式調用 如果回調函數返回了新的實例,後續的then的執行權應該交給這個實例 提供快速解決和拒絕的實例 提供批量和優先 實例內部的報錯是可控的 接下來嘗試實現 註釋挺明瞭的,就不過分贅述啦,說下思路: js是同步 ...
首先看看原生Promise有哪些功能:
- 支持同步和非同步
- 一個實例的狀態只能變更一次
- 支持鏈式調用
- 如果回調函數返回了新的實例,後續的then的執行權應該交給這個實例
- 提供快速解決和拒絕的實例
- 提供批量和優先
- 實例內部的報錯是可控的
接下來嘗試實現
註釋挺明瞭的,就不過分贅述啦,說下思路:
- js是同步執行的,想要實現非同步,就得考慮使用緩存
- 在回調函數返回G_Promise實例的情況下,後續then的執行權怎麼移交給這個實例?resolve和onResolved都只有一個參數,完全可以把resolve傳給這個實例的then
- 原生Promise的錯誤不會暴露在外面,那就得考慮try...catch...
- all...then...執行的時候也能保證時機恰當,all的原理貌似也是G_Promise