前端异步处理promise-理解与应用

本文详细介绍了Promise的底层原理,包括其状态(pending,resolve,reject)、不可逆性、链式调用方法,以及如何避免回调地狱。还讲解了Promise的常用方法如.all(),.race(),.any()和.allSettled(),以及async/await的使用示例。
摘要由CSDN通过智能技术生成

原理:

        promise的底层原理其实也是回调函数,只是在使用上一直通过 then方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些。

状态:

        promise有三个状态:等待(pending)、成功(resolve)、失败(reject)。

特点:

1.promise的状态是不可逆的,

2.promise可以通过.then()方法进行链式调用,每个then方法可以接收两个回调函数作为参数,对应操作成功和操作失败的情况。

3.避免回调地狱

用法:

let promiseFunc=new Promise(resolve,reject){
    let x=0;
    //异步方法
    setTimeout(()=>{
        x++;
        if(x===10){
            resolve(x)
        }else{
            reject(x)
        }
    },200)
},
//链式调用
promiseFunc.then((res,rej)=>{
    console.log(res);//符合条件
    console.log(rej);//不符合条件
}).catch((err)=>{
     console.log(err);//捕获异常
}).finally(()=>{
    console.log("始终会执行")//不管then catch 都会执行finally
})
//async/await调用
async function getPromise(){
    let res=await promiseFunc();
    console.log(res)
}

方法:

1、Promise.all(arr)     参数为数组 作用是将多个promise实例包装成一个新的promise实例,多个实例中只有全部实例状态都为成功后,新实例状态才会变成 成功。

let promiseFunc1=new Promise(resolve,reject){
    let x=0;
    //异步方法
    setTimeout(()=>{
        x++;
        if(x===10){
            resolve(x)
        }else{
            reject(x)
        }
    },200)
},
let promiseFunc2=new Promise(resolve,reject){
    let x=0;
    //异步方法
    setTimeout(()=>{
        x++;
        if(x===10){
            resolve(x)
        }else{
            reject(x)
        }
    },200)
},
let promiseFunc3=new Promise(resolve,reject){
    let x=0;
    //异步方法
    setTimeout(()=>{
        x++;
        if(x===10){
            resolve(x)
        }else{
            reject(x)
        }
    },200)
},
let newPromise=Promise.all([promiseFunc1,promiseFunc2,promiseFunc3])

2、Promise.race(arr)  参数为数组 作用是将多个promise实例包装成一个新的promise实例,新实例的状态取决于第一个改变状态的实例

3、Promise.any(srr) 参数为数组 作用是将多个promise实例包装成一个新的promise实例,多个实例中只要有一个状态为成功,新实例的状态就为成功

4、Promise.allSettled(arr) 参数为数组 作用是将多个promise实例包装成一个新的promise实例,当所有的实例都执行完之后不管成功还是失败,新实例的状态就必然为成功

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向小江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值