最近頻繁地使用 js 的 promise 的異步處理對象,來解決相對復(fù)雜的異步問題,記個(gè)筆記
首先 JavaScript 是一種單線程語言,導(dǎo)致JavaScript的所有網(wǎng)絡(luò)操作,瀏覽器事件,都必須是異步執(zhí)行。
一般而言,異步執(zhí)行可以用回調(diào)函數(shù)來實(shí)現(xiàn):
使用回調(diào)函數(shù)來實(shí)現(xiàn)異步
可見,異步操作會(huì)在將來的某個(gè)時(shí)間點(diǎn)觸發(fā)一個(gè)函數(shù)調(diào)用。古人云:“君子一諾千金”,這種“承諾將來會(huì)執(zhí)行”的對象在JavaScript中稱為Promise對象。Promise有各種開源實(shí)現(xiàn),在ES6中被統(tǒng)一規(guī)范,由瀏覽器直接支持。
Promise 對象是一個(gè)代理對象(代理一個(gè)值),被代理的值在Promise對象創(chuàng)建時(shí)可能是未知的。它允許你為異步操作的成功和失敗分別綁定相應(yīng)的處理方法(handlers)。 這讓異步方法可以像同步方法那樣返回值,但并不是立即返回最終執(zhí)行結(jié)果,而是一個(gè)能代表未來出現(xiàn)的結(jié)果的promise對象。
一個(gè) Promise 有以下幾種狀態(tài):
pending: 初始狀態(tài),既不是成功,也不是失敗狀態(tài)。
fulfilled: 意味著操作成功完成。
rejected: 意味著操作失敗。
通過完成 promise 對象在這幾種狀態(tài)之間的轉(zhuǎn)換,即可完成異步操作。并且因?yàn)?nbsp;Promise.prototype.then 和 Promise.prototype.catch 方法返回 promise 對象, 所以它們可以被鏈?zhǔn)秸{(diào)用。
使用 promise 對象進(jìn)行異步操作





暫無評論,快來評論吧!