1. 程式人生 > 其它 >Promise的幾個其他類方法

Promise的幾個其他類方法

1:resolve---把一個物件轉換成Promise物件

 1 //把一個物件轉成Promise物件 
 2 //resolve引數(普通的值、物件 Promise)
 3 const promise = Promise.resolve({ name: 'tyy' })
 4     //相當於
 5     // const promise=new Promise((resolve,reject)=>{
 6     //     resolve({name:'tyy'})
 7     // })
 8 promise.then(res => {
 9     console.log(res);
10 })

 

 2:reject---也是把一個物件轉換成為Promise物件 但是注意reject傳入的引數不會像resolve一樣分三種情況

 1 // const promise = Promise.reject('rejected message')
 2 //1:相當於
 3 // const promise=new Promise((resolve,reject)=>{
 4 //     reject('rejected message')
 5 // })
 6 //2:特別注意的是reject和resolve不太一樣 reject 傳入什麼就是什麼
 7 const promise = Promise.reject({
8 then: function(resolve, reject) { 9 resolve('1111') 10 } 11 }) 12 promise.then(res => { 13 console.log(res); 14 }).catch(err => { 15 console.log(err); 16 })

 

 3:all方法 多個Promise構成一個新的Promise 狀態(如果所有的Promise都是fulfilled狀態,新的Promise也是fulfilled狀態,如果所有的Promise,有一個rejected狀態,新的Promise也是rejected狀態)

 1 const p1 = new Promise((resolve, reject) => {
 2     setTimeout(
 3         resolve(11111), 1000)
 4 })
 5 const p2 = new Promise((resolve, reject) => {
 6     setTimeout(
 7         resolve(22222) //結果:res: [ 22222, 11111, 33333 ]
 8         //reject(22222)結果 err: 22222
 9         , 2000)
10 })
11 const p3 = new Promise((resolve, reject) => {
12     setTimeout(
13 
14         resolve(33333), 300)
15 })
16 Promise.all([p2, p1, p3]).then(res => {
17     console.log('res:', res);
18 }).catch(err => {
19     console.log('err:', err);
20 })

4:allSetted 無論所有的promise是什麼狀態,新的Promise都會是fulfilled狀態,並且會以陣列形式返回所有的promise的狀態

 1 //Promise.all
 2 //allSettled
 3 //race
 4 //any
 5 const p1 = new Promise((resolve, reject) => {
 6     setTimeout(
 7         reject(11111), 1000)
 8 })
 9 const p2 = new Promise((resolve, reject) => {
10     setTimeout(
11         //resolve(22222) 
12         reject(22222) 
13         , 2000)
14 })
15 const p3 = new Promise((resolve, reject) => {
16     setTimeout(
17 
18         reject(33333), 300)
19 })
20 Promise.allSettled([p2, p1, p3]).then(res => {
21     console.log('res:', res);
22 }).catch(err => {
23     console.log('err:', err);
24 })

 

 5:race---新的Promise的狀態===最先有結果的狀態(無論是fulfilled還是rejected)

 1 //Promise.all
 2 //allSettled
 3 //race
 4 //any
 5 const p1 = new Promise((resolve, reject) => {
 6     setTimeout(
 7         resolve(11111), 1000)
 8 })
 9 const p2 = new Promise((resolve, reject) => {
10     setTimeout(
11         //resolve(22222) 
12         reject(22222), 2000)
13 })
14 const p3 = new Promise((resolve, reject) => {
15     setTimeout(
16 
17         resolve(33333), 300)
18 })
19 Promise.race([p1, p2, p3]).then(res => {
20     console.log('res:', res);
21 }).catch(err => {
22     console.log('err:', err);
23 })

 

 6:any---ES12新增的---會等到一個fulfilled的狀態來決定新的Promsie的狀態,如果全部都是rejected狀態,也會等到所有的promise變成rejected狀態然後報一個錯誤

 1 //Promise.all
 2 //allSettled
 3 //race
 4 //any
 5 const p1 = new Promise((resolve, reject) => {
 6     setTimeout(
 7         reject(11111), 1000)
 8 })
 9 const p2 = new Promise((resolve, reject) => {
10     setTimeout(
11 
12         reject(22222), 2000)
13 })
14 const p3 = new Promise((resolve, reject) => {
15     setTimeout(
16         reject(3333) // 結果是err: AggregateError: All promises were rejected
17         //resolve(33333) //結果是res: 33333
18         , 300)
19 })
20 Promise.any([p2, p1, p3]).then(res => {
21     console.log('res:', res);
22 }).catch(err => {
23     console.log('err:', err);
24 })