###### tags: `JS` # Promise [MDN](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Promise) 用途: 優化非同步執行的流程語法、優化回調 使用時機: 串接 API 時 ### Promise 可分為三個狀態: 1. Pending : 等待中 2. Reslove : 完成 - 完成後跳到 then 繼續做串接 , 或者使用 Await 接收 4. Reject : 失敗 - 失敗後跳到 catch 處理錯誤 ### Promise 的兩個方法: 1. Promise all [ iterable ] : 統一執行陣列中所以值,等到全部成功(或一個拒絕)後輸出 2. Promise.race ( iterable ) : 當傳入的 iterable 中有 promise 被實現或拒絕時,立刻回傳被實現或拒絕的 Promise。 ### Promise 語法糖 ( Async function 及 Await ): 1. Async : 非同步函式,用此語法宣告的函式,能在內部使用同步操作執行,且回傳為Promise的結果,因此只能用reslove()接收 2. Await : 屬於一元運算子,必須在外層宣告 Async 函式時候內部才能使用,會等待收到 resolve() 之後才會進行後面的動作,如果沒有收到就會一直處在等待的狀態 好處:使用表達式 ![](https://i.imgur.com/oD0AwEM.png) 來代替原先 Promise 鏈接的方式 > [ 使用 Await 時, 因為是同步操作,因此當該行出錯時,不會往下執行而卡住,則需使用 Try ... Catch 包住來進行例外處理 ]