ECMAScript 6---Promise對象

所謂promise,其實(shí)就是異步編程的一種解決方案。

特點(diǎn):

promise對象狀態(tài)不受外界影響(由異步操作的結(jié)果決定)。

  1. pending:進(jìn)行中
  2. resolved(fulfilled):已完成
  3. rejected:已失敗

一旦狀態(tài)改變,將不會再變(狀態(tài)凝固,保持不變)

  1. pending → resolved
  2. pending → rejected

缺點(diǎn):

  1. 無法中途取消promise
  2. 如果不設(shè)置回調(diào)函數(shù),promise內(nèi)部拋出的錯誤無法反應(yīng)到外部
  3. pending狀態(tài)下,無法得知進(jìn)展階段

==============================================

var promise = new Promise( (resolve,reject) => {

if (/*異步操作成功*/) {

    resolve(value);

} else {

    reject(error);

}

} )

==============================================

注:Promise是一個構(gòu)造函數(shù),用來創(chuàng)建promise實(shí)例。參數(shù)為一個函數(shù),該函數(shù)有兩個參數(shù):

  1. resolve:當(dāng)異步操作返回成功時調(diào)用,并將結(jié)果傳遞給回調(diào)函數(shù)
  2. reject:當(dāng)異步操作返回失敗時調(diào)用,并將錯誤信息傳遞給回調(diào)函數(shù)

==============================================

promise.then ( (value) => {

//success

}, (err) => {

//failure

} )

==============================================

注:then方法可以傳遞兩個回調(diào)函數(shù)作為參數(shù)(兩個函數(shù)均接受promise對象傳出的值作為參數(shù))

  1. 第一個回調(diào)函數(shù)為Promise狀態(tài)pending → resolve時調(diào)用
  2. 第二個回調(diào)函數(shù)為Promise狀態(tài)pending → reject時調(diào)用,可選

p1和p2是兩個promise實(shí)例,當(dāng)p2的resolve方法將p1作為參數(shù)時:

  1. p1為pending狀態(tài)時,p2的回調(diào)函數(shù)會等待p2狀態(tài)的改變;
  2. p2為resolve狀態(tài)時,p2的回調(diào)函數(shù)立即調(diào)用
  3. p2為reject狀態(tài)時,p2的回調(diào)函數(shù)立即調(diào)用,但是此時p2的狀態(tài)無效,以p1狀態(tài)為準(zhǔn),觸發(fā)p2回調(diào)函數(shù)中的catch方法

Promise.prototype.then()

then方法返回的是一個新的promise實(shí)例,因此可以采用鏈?zhǔn)綄懛ǎㄇ耙粋€回調(diào)函數(shù)執(zhí)行完畢,會把返回的結(jié)果作為參數(shù)傳遞給下一個回調(diào)函數(shù),以此類推)

Promise.prototype.catch()

和.then(null,reject)等價,用于指定發(fā)生錯誤時的回調(diào)。異步操作狀態(tài)變?yōu)閞eject時,調(diào)用catch方法,當(dāng)then方法內(nèi)拋出異常時,也會被catch方法捕獲

Promise.all()

用于將多個promise實(shí)例包裝成一個promise實(shí)例,參數(shù)為一個包含多個promise實(shí)例的數(shù)組,如果數(shù)組元素不是promise實(shí)例,會先調(diào)用Promise.resolve方法轉(zhuǎn)換為promise實(shí)例

  1. p1, p2, p3均為resolve時,返回的p也為resolve
  2. p1, p2, p3有一個為reject時,p為reject,此時第一個被reject的返回值會傳遞給p的回調(diào)函數(shù)

Promise.race()

參數(shù)同all方法,不同的是,當(dāng)參數(shù)中的實(shí)例有一個返回率先改變狀態(tài),p的狀態(tài)便隨之改變。

Promise.resolve()

將現(xiàn)有對象轉(zhuǎn)換為promise對象。

  1. 參數(shù)是一個promise實(shí)例時,不做修改返回。
  2. 參數(shù)是一個thenable(含有then方法的對象)時,會先轉(zhuǎn)換為promise對象,并立即執(zhí)行thenable對象內(nèi)的then方法。
  3. 參數(shù)不是一個對象時,返回一個新的promise對象,狀態(tài)為resolve。
  4. 當(dāng)沒有參數(shù)時,直接返回一個狀態(tài)為resolve的promise對象。

Promise.reject()

返回一個狀態(tài)為reject的promise對象。

done()

處于回調(diào)鏈的尾端,保證最后一個then或者catch方法拋出的錯誤可以接收到。

finally()

無論最后的狀態(tài)是哪一個,都會執(zhí)行的代碼塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,837評論 1 56
  • Promise對象是一種解決異步問題的方法,還有的解決方案是asyns 和 await (es7) 這么是目前的終...
    站在大神的肩膀上看世界閱讀 1,337評論 0 6
  • 一、Promise的含義 Promise在JavaScript語言中早有實(shí)現(xiàn),ES6將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了用法...
    Alex灌湯貓閱讀 888評論 0 2
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,568評論 0 8
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,227評論 0 12

友情鏈接更多精彩內(nèi)容