---
# System prepended metadata

title: Promise
tags: [JS]

---

###### 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 包住來進行例外處理 ]






