總結一下ES6的promise

2022-07-12 13:54:20 字數 2503 閱讀 6322

promise有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗),promise建構函式接受乙個函式作為引數,該函式的兩個引數分別是resolve和reject,其中resolve函式會將pending狀態改為fulfilled,reject函式將pending改為rejected狀態,狀態一旦改變,將不可逆。這兩個函式的函式的引數將會傳給**函式

注:$http返回的是乙個promise物件。
結果如下:

網路請求404->失敗的**函式err_1方法->成功的**函式(why),原因就是then中的**函式,無論是成功**還是失敗**,他們return的值都會被包裝成promise的物件的resolved函式來處理,從而會傳遞給下乙個then方法的成功**函式裡面去。

**2:

promise.resolve()

.then(() => )

.then((res) => )

.catch((err) => )

結果是:
then: error: error!!!

at promise.resolve.then (...)

at ...

原因是:.then 或者 .catch 中 return 乙個 error 物件並不會丟擲錯誤,而是通過resolved來處理的,所以不會被後續的 .catch 捕獲,需要改成其中一種:

1.return promise.reject(new error('error!!!'))

2.throw new error('error!!!')

promise.prototype.catch方法是.then(null, rejection)的語法糖,用於指定發生錯誤時的**函式。

1.then方法中沒有第二個失敗**函式,當reject後,會進入catch方法;若then方法有第二個失敗

**,則reject後會進入此函式,而不會進入catch方法。

$http().then(function successcallback(data_1) ,function (err_1) ).catch(function (reason) );
結果:

當沒then有第二個**函式,則會進入catch方法。

小疑問:catch方法中return乙個數值,在其後面的.then()的成功**中會接收到麼?答案是會的,把catch看做成沒有成功回到的.then(),其return的數值也會被resolved出去。

注意:不要在then方法裡面定義 reject 狀態的**函式(即then的第二個引數),總是使用catch方法。理由是第二種寫法可以捕獲前面then方法執行中的錯誤,也更接近同步的寫法(try/catch)

// bad

promise

.then(function(data) , function(err) );

// good

promise

.then(function(data) )

.catch(function(err) );

即:如果在「標記1」出**丟擲錯誤,後面的失敗**函式是捕捉不到的(只能捕捉上乙個promise物件丟擲的錯誤,自己所處在的then中是捕捉不到的),而只能被下乙個then函式的失敗**(也就是catch)捕捉到。

例子:

promise.resolve()

.then(function success (res) , function fail1 (e) )

.catch(function fail2 (e) )

結果:

fail2: error: error

at success (...)

at ...

.then 可以接收兩個引數,第乙個是處理成功的函式,第二個是處理錯誤的函式。.catch 是 .then 第二個引數的簡便寫法,但是它們用法上有一點需要注意:.then 的第二個處理錯誤的函式捕獲不了第乙個處理成功的函式丟擲的錯誤,而後續的 .catch 可以捕獲之前的錯誤

以下**也可以:

promise.resolve()

.then(function success1 (res) , function fail1 (e) )

.then(function success2 (res) , function fail2 (e) )

ES6學習筆記(一) Promise

promise 是 es6 提供的一種非同步程式設計的解決方案 將非同步操作以同步操作的流程表達出來,避免了層層巢狀的 函式 解決非同步函式 地獄的問題 promise 物件儲存著非同步操作的結果。首先看非同步的概念,這在 ecmascript6入門 中介紹的很好 所謂 非同步 簡單說就是乙個任務不...

ES6中的Promise的用法總結

第一部分 什麼是promise promise是es6中提供的乙個非同步程式設計的解決方案,promise本身是乙個建構函式 typeof promise function 一般情況下 我們在開發中會使用 new promise 呼叫建構函式,建立乙個新的promise物件,promise物件有兩個...

使用ES6模擬Promise

const promise newstatus param newvalue param queue 執行的作業佇列 changestatus newstatus,newvalue,queue this promisestatus newstatus this promivevalue newval...