亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Promise的理解

Binguner / 2104人閱讀

摘要:中就是一個構(gòu)造函數(shù)函數(shù)也是對象為什么需要多個嵌套的異步操作,如果直接用方式,會導(dǎo)致的出現(xiàn)使得異步操作更加規(guī)范,更加統(tǒng)一。的方法構(gòu)造函數(shù)構(gòu)造函數(shù)用于生成對象,函數(shù)在構(gòu)造函數(shù)執(zhí)行時同步執(zhí)行。

什么是Promise?

含以上:抽象異步操作的工具。
javascript中:Promise就是一個構(gòu)造函數(shù)(函數(shù)也是對象)

為什么需要Promise?

1.多個嵌套的異步操作,如果直接用callback方式,會導(dǎo)致callback hell
2.Promise的出現(xiàn)使得異步操作更加規(guī)范,API更加統(tǒng)一。
3.多個異步操作之間較復(fù)雜的關(guān)系可以簡單通過Promise處理。

Promise的三種狀態(tài)

fulfilled:滿足,成功
rejected:拒絕,失敗
pending:初始狀態(tài)
注:settled是指fulfilled,rejected狀態(tài)之一。

Promise的方法: Promise()構(gòu)造函數(shù)
Promise(
    //executor
    function( resolve,reject){
    }
);

構(gòu)造函數(shù)用于生成Promise對象,executor函數(shù)在Promise構(gòu)造函數(shù)執(zhí)行時同步執(zhí)行。
resolve,reject函數(shù)被調(diào)用時分別將Promise狀態(tài)設(shè)置為fulfilled,rejected

new Promise( (resolve, reject)=>{
    resolve( "resolved value" );
});

new Promise( (resolve, reject)=>{
    reject( "rejected value" );
});
Promise.resolve, Promise.reject

Promise還提供了全局的靜態(tài)方法用于快速生成Promise對象。
Promise.resolve生成fulfilled狀態(tài)的Promise
Promise.reject生成rejected狀態(tài)的Promise

    Promise.resolve( "resolved value" );
    Promise.reject( "rejected value" );
Promise實例方法:then( onfulfilled, onrejected ), catch( onrejected )

then和catch用于處理Promise fullfilled成功或者rejected失敗時候的情況。
更加推薦的做法:
myPromise.then(onfulfilled).catch(onrejected);
這樣的好處:
1.then,catch區(qū)分開,分別處理成功,失敗,代碼更容易理解。
2.then().then().then().catch(); then,catch方式可以捕獲到前面多個then中的異常。

Promise可以鏈式調(diào)用的原因?

因為Promise.prototype.then方法和Promise.prototype.catch方法都返回Promise對象。所以可以鏈式調(diào)用:

myPromise.then(xxx).then(xxx);
Promise.prototype.then(onfulfilled, onrejected)當中,then返回的Promise和onfulfilled,onrejected的返回值有什么聯(lián)系?
onfulfilled,onrejected的返回值 then,catch的返回值
值(常用)
fulfilled Promise
fulfilled Promise
throw Error異常
rejected Promise
rejected Promise
pending Promise pending Promise
多個Promise關(guān)聯(lián)操作

假設(shè)有A/B/C三個Promise
1.A執(zhí)行完才能執(zhí)行B,B執(zhí)行完才能執(zhí)行C
典型的順序執(zhí)行關(guān)系,直接使用鏈式操作:

A.then(()=>{return B})
 .then(()=>{return C});

2.A/B執(zhí)行成功了才能執(zhí)行C

Promise.all([A,B]).then(
()=>{
    return C;
}
);

3.ABC中任意一個settled即可:
Promise([A,B,C]).then(xxx).catch(xxx);
注意:第一個Promise settled之后,不會取消剩余的Promise對象的執(zhí)行。

額外知識:

1.Promise.resolve方法除了快速創(chuàng)建Promise以外,還能夠?qū)henable(有.then方法的對象)對象轉(zhuǎn)換為Promise。 典型的$.ajax()就會返回thenable對象。

2.then(onfulfilled, onrejected)中的onfulfilled,onrejected方法是異步調(diào)用的即時在調(diào)用Promise.prototype.then注冊Promise時,Promise已經(jīng)setteled,這2個函數(shù)也不會馬上同步執(zhí)行。Promise會以異步方式調(diào)用該回調(diào)函數(shù),這個Promise設(shè)計上的規(guī)定方針。

3.如果如果沒有注冊onrejected函數(shù),那么異常會拋出,只是捕獲不了。

4.盡量不要使用非鏈式操作Promise對象, 非鏈式操作情況下異常不會被捕獲,也不能得到then的返回值(即時then有返回值的情況)

5.使用reject而不是throw來觸發(fā)Promise失敗,因為throw的話很難區(qū)分是主動拋出的rejected還是程序執(zhí)行出錯。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88673.html

相關(guān)文章

  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時通過http獲取一個第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個接口,可通過...

    tuniutech 評論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評論0 收藏0
  • 理解 Javascript 中 Promise

    摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    paulli3 評論0 收藏0
  • 理解 Javascript 中 Promise

    摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    chaos_G 評論0 收藏0
  • Promise理解與實現(xiàn)

    摘要:對象設(shè)置初始狀態(tài)默認為等待狀態(tài)用數(shù)組來保存成功函數(shù)設(shè)置為成功狀態(tài)設(shè)置為失敗狀態(tài)調(diào)用回調(diào)函數(shù)增加方法根據(jù)狀態(tài)執(zhí)行成功失敗方法執(zhí)行成功方法執(zhí)行失敗方法將成功失敗方法保存在數(shù)組里 promise理解 promise的意思是承諾。承諾理解為某個時候一些條件滿足后,會兌現(xiàn)一件事情。 //為了方便理解我編一個小故事 //先假裝我有一個女朋友 //她承諾如果她爸媽不回來就給我就可以去幫她修電腦 否則...

    hlcc 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<