Constructor
1 | const promise1 = new Promise((resolve, reject) => { |
Syntax
1 | new Promise(executor) |
Parameter
executor
為一個function,接收兩個參數(function),resovle
及rejects
,通常executor會發起一些非同步操作,接著,成功完成後會執行resolve
;如果錯誤,執行rejects
。
為什麼要使用Promise
有個常見的需求是依序呼叫兩個以上的非同步函數,因為多數非同步函數都有callback,如果非同步函數一個接一個,那就會很恐怖。
主要原因是避免波動拳(Pyramid of Doom)
1 | doSomething(function(result) { |
但如果用Promise
1 | doSomething().then(function(result) { |
看起來就會簡潔多了
基本規則
- 一個Promise物件處於3種狀態
- pending (擱置)
- fulfilled (實現)
- rejected (拒絕)
- Promise狀態只能從pending → fulfilled ,或是pending → rejected
- 一旦狀態確定,就不能再更改
- 當狀態發生轉變,就會調用透過then方法傳入的function
then
Promise物件有then方法,then是定義在原型物件Promise.prototype上的,他的作用是當Promise狀態改變時的回調函數(callback),當非同步操作成功時,執行resolve,失敗則執行rejected。
其他Promise原型定義方法 👇
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise#promise_原型
實際範例
Ajax+promise的應用:
1 | function myAsyncFunction(url) { |
參考資料
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise/then