关于Promise链式/all小记

链式

当需要实现 某一接口返回值作为另一接口的实际参数 时,可通过链式的方式。
优点 是不会出现调用接口的多重嵌套,同时统一异常处理,从而提高代码可读性。
原理then 方法返回的是一个新的Promise实例。后面的 then 方法是为上一个 then 方法返回的Promise注册回调。前面 then 方法的返回值是后面 then 方法的参数。

const requireApi = (option)=>{
    return new Promise((resolve,reject)=>{
        if(option.code==200){
            setTimeout(()=>{
                resolve(option.str+":200")
            },1000)
        }else{
            reject(option.str+"404")
        }
    })
}

requireApi({
    str:"第一层",
    code:200
}).then(res=>{
    console.log("第一层获得结果===")
    console.log(res)
    return requireApi({
        str:"第二层",
        code:201
    })
}).then(res=>{
    console.log("第二层获得结果===")
    console.log(res)
}).catch(rej=>{
    console.log("失败结果===>>")
    console.log(rej)
})

/**
 * 结果
    第一层获得结果===
    第一层:200
    失败结果===>>
    第二层404
 */

all

当需要实现 等待所有指定接口成功返回后 再就行统一处理 时,可通过all方法。
优点 如控制页面的加载模块的显示隐藏,同时在出现异常时能统一处理避免报错。

const requireApi = (option)=>{
    return new Promise((resolve,reject)=>{
        if(option.code==200){
            setTimeout(()=>{
                resolve({
                    msg:`${option.str}成功`,
                    code:200
                })
            },1000)
        }else{
            reject(option.str+":404")
        }
    })
}

console.log("加载开启===")
//只调用并赋值,不做回调处理
const p1 = requireApi({
    str:'p1',
    code:200
})
const p2 = requireApi({
    str:'p2',
    code:200
})

//若都成功,则返回res。res是数组,对应每一个实例的返回值
//有一失败,则返回rej。rej是失败实例的返回信息
Promise.all([p1,p2]).then(res=>{
    console.log(res)
    console.log("加载关闭===")
}).catch(rej=>{
    console.log(rej)
    console.log("加载关闭===")
})

/**
 * 结果
    加载开启===
    [ { msg: 'p1成功', code: 200 }, { msg: 'p2成功', code: 200 } ]
    加载关闭===
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值