Promise的幾個其他類方法
阿新 • • 發佈:2022-04-01
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 })