Skip to content
On this page

Promise 筆記

Promise 是 ES6 新增的語法,用來處理非同步行為。Promise 會有三種狀態:

  • pending: 承諾尚未兌現。
  • resolved: 承諾已履行。
  • rejected: 拒絕承諾。

Promise 一旦履行或拒絕後,就不會再改變其狀態。

建立 Promise

建構函式 new 一波。

Promise 內的 function 會有兩個參數:resolvereject,分別代表 Promise 成功或失敗所要做的事情。

javascript
const promise = new Promise((resolve, reject)=>{
    resolve("ya")
    reject("no~~")
})

TIP

resolvereject 的名稱可以自定義,但在開發上大多數開發者習慣維持此名稱。

Chained Promise 上面的例子接著可以使用:

javascript
promise.then();    // Promise 回傳正確
promise.catch();   // Promise 回傳失敗
promise.finally(); // 非同步執行完畢(無論是否正確完成)

then() 可以連接多個,但只要中間失敗,後續的 then() 都不會執行,直接跳到 catch()。

finally 則不需要帶參數,在最後結束時執行。

javascript
promise
  .then((success) => {
    console.log(success);
    return promise;
  })
  .then((success) => {
    console.log(success);
  })
  .catch((err) => {
    console.log(err);
  }).finally(()=>{
    console.log("finally")
  })

Promise API

看一下 Promise 其他方法 :

Promise.all(iterable)

參數接受陣列,陣列中可放多個 promise。

所有 promise 完成後會回傳一個陣列,陣列裝著各個 promisecallback 只要其中一個變成 rejected,則回傳第一個 rejectedpromise

Promise.race(iterable)

參數一樣接受陣列,只要任一個 promise 狀態改變,則回傳該個 promise 的 callback

Promise.resolve(value)

Promise.resolve() 函數用來將一個物件轉型為 Promise (如果它不是一個 Promise 物件),然後立刻 resolve 它。

Promise.reject(reason)

Promise.reject() 函數用來將一個物件轉型為 Promise (如果它不是一個 Promise 物件),然後立刻 reject 它。

參考資料

  • JavaScript Promise 全介紹 JavaScript ES6 Promise Object 物件