JS----Promise的方法

什么时候使用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);
})

结语

总结不易,麻烦各位看官留下你的足迹吧~,♥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值