ES6 Promise使用介紹

2022-07-18 03:12:12 字數 3023 閱讀 5697

1、什麼是promise

promise 是非同步程式設計的一種解決方案,比傳統的解決方案——**函式和事件——更合理和更強大。

這麼說可能不夠直觀的理解,看下面的兩個例子

//

callback**函式

function

getcallback(n,callback) ,2000)

}getcallback(3,function

callback(n) )

//promise函式的基礎用法(等同於上面的**函式)

function

runpro(n),2000)

})return

p }

runpro(3).then((res) =>)

這麼看是不是覺得promise並沒有什麼特別的,而且還要費勁封裝,有這功夫用**函式就好了,那麼在看下面的例子

//

三層callback**函式(傳說的**地獄)

function

getcallback0(n,callback1) )

},2000)

}getcallback0(3,function

callback1(n,callback2) )})

//三層promise(等同於上面的**函式)

function

runpro0(n),2000)

})return

p }

runpro0(3)

.then((res) =>)

return

pro1

}).then((res) =>)

return

pro2

}).then((res) =>)

通過上面的對比可以很清除的看出,用promise處理非同步事件更加簡潔直觀

2、基礎用法

const p = new promise(function

(resolve,reject)

else

})p.then(

function

(res) ,

function

(err) )

p.catch(function

(err) )

p.finally(function())

3、promise的相關方法

promise.prototype.then() 

promise.prototype.

catch

() promise.prototype.

finally

() promise.resolve()

promise.reject()

promise.all()

promise.race()

由**可以看出.then() .catch() .finally()都是定義在原型物件上的

4、then 的用法

由上面的基礎用法**可以看出.then()接收兩個引數,第乙個是resolved狀態的**函式,第二個是rejected狀態的**函式

5、catch的用法

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

6、finally的用法

.finally方法用於指定不管 promise 物件最後狀態如何,都會執行的操作。該方法是 es2018 引入標準的。

7、all的用法

promise的all方法提供了並行執行非同步操作的能力,並且在所有非同步操作執行完後才執行**,all接收乙個陣列引數,裡面的值最終都算返回promise物件。這樣,三個非同步操作的並行執行的,等到它們都執行完後才會進到then裡面。那麼,三個非同步操作返回的資料**去了呢?都在then裡面呢,all會把所有非同步操作的結果放進乙個陣列中傳給then。

(1)只有getnumber1、getnumber2、getnumber3的狀態都變成fulfilled,promise的狀態才會變成fulfilled,此時getnumber1、getnumber2、getnumber3的返回值組成乙個陣列,傳遞給promise的**函式。

(2)只要getnumber1、getnumber2、getnumber3之中有乙個被rejected,promise的狀態就變成rejected,此時第乙個被reject的例項的返回值,會傳遞給promise的**函式。

function

getnumber1(), 1000);

});return

p;

}function

getnumber2(), 2000);

});return

p;

}function

getnumber3(), 3000);

});return

p;

}promise.all([getnumber1(),getnumber2(),getnumber3()])

.then(

function

(res),

function

(err))

.catch(function

(err2))

8、race的用法

promise.race方法同樣是將多個 promise 例項,包裝成乙個新的 promise 例項。

不過只要getnumber1、getnumber2、getnumber3之中有乙個例項率先改變狀態,promise的狀態就跟著改變。那個率先改變的 promise 例項的返回值,就傳遞給promise的**函式。

注意:1、promise定義後就執行,所以通常用函式進行分裝

2、promise.all()中的引數是以乙個陣列傳入的

ES6 Promise的簡單使用

promise是乙個容器,儲存某個非同步的操作 有三種狀態,進行中 已成功 已失敗 resolve代表成功的 函式 reject代表失敗的 函式 let promise new promise function resolve,reject else 通過then 方法向promise傳遞成功和失敗...

ES6 Promise基本用法

1 promise是什麼 promise是非同步程式設計的一種解決方案,在es6中promise被列為了正式規範,統一了用法,原生提供了promise物件。2 基礎用法 resolve代表成功 reject失敗 都是乙個函式 let p new promise function reslove,re...

ES6 promise簡單實現

從promise的概念和使用分析 一句話 利用3個狀態,當執行一次後狀態改變同時執行then中當所有事件 狀態改變後,不會在執行 1.建構函式 2.3個狀態 pending,fulfilled,rejected,狀態一旦確定為fulfilled,rejected就不會在更改 3.引數是函式,prom...