什么时候使用Promise?
在开发中异步回调函数使用Promise.
一、Promise的主要方法
1.1 Promise.resolve(value):
立即创建一个成功状态的Promise,将传入的值作为成功的值。若传入的是具有then方法的对象(thenable)或Promise,则相应转换或直接返回。
1.2 Promise.reject(reason):
创建一个失败状态的Promise,以传入的原因作为失败的理由。
1.3 Promise.all(promises):
等待多个 Promise全部完成,只有所有输入的 Promise 都成功时,返回的Promise才成功,且包含所有成功值组成的数组;若有一个失败,则整个返回的Promise失败,并返回第一个失败的原因。
示例代码:
// 同时异步多个Promise,并且返回resolve结果的列表
// 将所有需要Promise的对象放在数组中,然后把数组放在all里面,then执行时,就会把每个Promise中
// resolve()传参的结果放在一个数组中,传出
let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${39+index}.JPG`));
Promise.all(arr).then(function(list){
console.log(list);
})
let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
// 如果有一个出错,就会执行catch,不会执行then,必须保证所有Promise都会执行resolve
Promise.all(arr).then(function(list){
console.log(list);
}).catch(function(e){
console.log(e);
})
1.4 Promise.race(promises):
返回一个Promise,它随输入的Promise 中第一个被确定(成功或失败)的Promise而确定,可用于模拟超时机制。
示例代码:
// 同时对多个异步Promise执行,谁先执行完成resolve,就返回这个resolve的结果
// 如果有一个调用reject不会调用then
let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
Promise.race(arr).then(function(img){
console.log(img);
})
1.5 Promise.any(promises):
只要输入的Promise中有一个成功,它就成功并返回第一个成功的Promise的值;若所有都失败,才失败并返回包含所有失败原因的AggregateError 对象。
示例代码:
// 同时对多个异步Promise执行,谁先执行完成resolve,就返回这个resolve的结果
// 即是有reject,也会执行then
let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
Promise.any(arr).then(function(img){
console.log(img);
})
1.6 Promise.allSettled(promises):
返回一个Promise,在所有输入的Promise都确定后才确定,结果是一个数组,每个元素描述对应输入Promise的结果,包括状态和值或原因。
示例代码:
// allSettled 同时异步执行多个promise
// 在执行失败后仍然执行then,返回的内容中也是一个数组,
// 数组中的内容是一个对象,对象中都有status值如果是"fulfilled"就是成功,如果是rejected就是失败的
// 如果成功,value就是返回的结果,如果失败,reason就是错误的结果
let arr=Array(5).fill(1).map((item,index)=>loadImage(`./img/img_${38+index}.JPG`));
Promise.allSettled(arr).then(function(list){
console.log(list);
list=list.reduce(function(value,item){
if(item.status==="fulfilled") value.push(item.value);
return value;
},[])
console.log(list);
})
二、Promise 实例的方法
2.1 then(onFulfilled, onRejected):
注册成功和失败时的回调函数,返回一个新的 Promise,允许链式调用。
2.2 catch(onRejected):
专门注册失败时的回调函数,返回新的Promise,便于错误处理后的链式操作。
2.3 finally(onFinally):
注册一个无论成功失败都会被调用的回调函数,通常用于执行清理操作,返回的Promise状态和值与原始Promise相同
示例代码:
//这个resolve和reject是两个回调函数名
//在Promise执行了resolve就不会执行reject,执行reject就不会resolve
var p=new Promise(function(resolve,reject){
resolve();
reject()
})
//当执行了Promise中resolve就会执行then中函数
//当执行了Promise中reject就会执行catch中函数
p.then(function(){
}).catch(function(){
})
//resolve和reject都可以传参,且仅能传一个参数
new Promise(function(resolve,reject){
resolve(1);
}).then(function(n){
console.log(n);
})
结语
总结不易,麻烦各位看官留下你的足迹吧~,♥