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