Promise all 特性(只要失败一个就不会走then)的解决方案

Promise all    打包几个接口一起请求。

但是其中如果有一个接口失败了那么就不会继续走下去了  会影响到其他接口操作,关联性太强了,

需求: 前面打包的的几个接口操作无论失败或者成功几个都需要走后面的接口,就会有点麻烦了,

解决:在catch里面resolve就行了

const  p1 =  new Promise(resolve => {
    const a =b;
    resolve(a);
}).catch(()=>{
    return Promise.resolve('aaab')
});
const  p2 =  new Promise(resolve => {
    const a =1;
    return resolve(a);
}).catch(()=>{
    return Promise.resolve('aaa')
});


Promise.all([p1,p2]).then((data)=>{
    console.log('then 成功',data);
}).catch((err)=>{
    console.log('333');
    console.log('errr',err);
})

 

打印效果

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我非常愿意帮助你手写一个 Promise.all() 函数。 首先,我们需要了解 Promise.all() 函数的作用。它可以接受多个 Promise 对象作为参数,并在这些 Promise 对象都被 fulfilled(已完成)时才返回一个 resolved(已解决)状态的 Promise 对象,如果其中任何一个 Promise 被 rejected(已拒绝),则该 Promise 返回的状态也为 rejected(已拒绝)。 现在,让我们手写一个简单的 Promise.all() 函数: ```javascript function promiseAll(promises) { return new Promise(function(resolve, reject) { if (!Array.isArray(promises)) { return reject(new TypeError('参数必须为数组')); } var resolvedCounter = 0; var promiseNum = promises.length; var resolvedValues = new Array(promiseNum); for (var i = 0; i < promiseNum; i++) { (function(i) { Promise.resolve(promises[i]).then(function(value) { resolvedCounter++; resolvedValues[i] = value; if (resolvedCounter == promiseNum) { return resolve(resolvedValues); } }).catch(function(reason) { return reject(reason); }); })(i); } }); } ``` 在这个函数中,我们首先检查传递的参数是否为数组。如果不是,则返回一个 rejected(已拒绝)状态的 Promise 对象,并抛出一个类型错误。然后,我们使用一个 for 循环迭代数组中的所有 Promise 对象。由于对于每个 Promise 对象都需要进行异步操作,因此我们使用了一个自执行函数,并传递 i 作为参数。这样可以确保每个 Promise 对象都在自己的闭包中执行,而不是在全局作用域中执行。 接下来,我们使用 Promise.resolve() 将 promise 对象转换为 Promise 对象。然后,我们分别使用 then() 和 catch() 方法处理 resolved 和 rejected 状态。 在 then() 方法中,我们将该 Promise 的 resolved 值存储在 resolvedValues 数组中,并检查是否已解决了所有 Promise 对象。如果是,则返回一个 resolved(已解决)状态的 Promise 对象,并传递解析的值。如果所有 Promise 对象都已解决,则 resolvedValues 数组包含所有解决方案,而 resolvedCounter 等于 promiseNum。 在 catch() 方法中,我们直接返回一个 rejected(已拒绝)状态的 Promise 对象,并传递 rejection 原因。 现在,您已经了解了如何手写一个 Promise.all() 函数。祝你好运!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值