async/ await:一個用同步思維解決異步問題的方案。
async:作爲一個關鍵字放到函數前面,用於表示函數是一個異步函數,不會阻塞後面的函數。
await操作符:用於等待一個promise對象, 它只能在異步函數async funtion 內部使用,如果代碼中有return(非promise)語句,會自動把返回的這個value值包裝成promise的resolved值。
即:確保函數返回一個promise,即使其中包含非promise。
await在等待 Promise 對象時會導致async funtion 暫停執行, 一直到 Promise 對象決議之後纔會 async funtion 繼續執行。
語法:
【async function ([param[, param[, ... param]]]) { statements }】
Promise 對象:用於表示一個異步操作的最終狀態(完成或失敗),以及其返回的值。
Promise 對象是一個代理對象(代理一個值),被代理的值在Promise對象創建時可能是未知的。它允許你爲異步操作的成功和失敗分別綁定相應的處理方法(handlers)。 這讓異步方法可以像同步方法那樣返回值,但並不是立即返回最終執行結果
Promise有以下幾種狀態:
pending: 初始狀態,既不是成功,也不是失敗狀態。
fulfilled: 意味着操作成功完成。
rejected: 意味着操作失敗。
語法:
【new Promise( function(resolve, reject) {...} /* executor */ );】
executor:一個函數,帶有 resolve 和 reject 兩個參數。
Promise構造函數執行時立即調用executor 函數, resolve 和 reject 兩個函數作爲參數傳遞給executor(executor 函數在Promise構造函數返回新建對象前被調用)。
resolve 和 reject 函數被調用時,分別將promise的狀態改爲fulfilled(完成)或rejected(失敗)。