【譯】JavaScript Promise API
在 JavaScript 中,同步的代碼更容易書寫和 debug,但是有時候出于性能考慮,我們會寫一些異步的代碼(代替同步代碼)。思考這樣一個場景,同時觸發(fā)幾個異步請求,當所有請求到位時我們需要觸發(fā)一個回調,怎么做?Promise 讓一切變的簡單,越來越多的原生 API 基于 Promise 去實現(xiàn)。那么,什么是 Promise?Promise API 如何使用?
基于 Promise 的 原生 API
Promise 主要是為了解決異步的回調地獄。我們熟悉的 XMLHttpRequest API 可以異步使用,但是它沒有基于 Promise API。一些原生的 API 已經使用了 Promise,比如:
Battery API
fetch API(下一代 XHR)
ServiceWorker API
對于 Promise 的測試其實非常簡單,使用 SetTimeout 就能當做一個異步的事件來測試。
Promise 基本用法
Promise 本質其實是一個構造函數(shù),其接受一個函數(shù)作為參數(shù),而這個函數(shù)內部一般會寫一些異步事件處理的代碼,比如 SetTimeout 或者 XMLHttpRequest。異步事件我們一般都會有一個 "失敗" 的處理機制,我們還可以給這個作為參數(shù)的函數(shù)傳入兩個參數(shù) resolve 和 reject,分別表示異步事件 "成功" 和 "失敗" 時的回調函數(shù)。
復制代碼let p = new Promise((resolve, reject) =>&nbs