因为我们经常会使用到接口的重复调用问题或链式调用接口

  1. Promise.all 很舒服的解决了这些问题

但是Promise.all的特性 是会执行里面的所有异步操作,遇到抛错就取消执行,并不会继续往下执行了。
有时我们 需要能继续执行下去。这样也是有方法能实现的…

    // 代码 解决:在catch里面resolve就行了
    // 测试了下 解决方式还能实现
    var p1 = new Promise(resolve => {
        let p1Data = b;
        resolve(p1Data)
    }).catch(err => {
        return Promise.resolve("P1 无数据")
    })

    var p2 = new Promise(resolve => {
        let p2Data = 'p2的有数据';
        resolve(p2Data)
    }).catch(err => {
        return Promise.resolve("P2 无数据")
    })

    Promise.all([p1, p2]).then(res => {
        console.log(res);
    }).catch(err => {
        throw new Error("Promise 执行错误", err)
    })

执行结果
在这里插入图片描述这样就不会 出错就不往下执行啦

感谢参考此博客 嘻嘻嘻

  1. Promise.race的使用

Promse.race 特性就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。

  let p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success')
  },1000)
})

let p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('failed')
  }, 500)
})

Promise.race([p1, p2]).then((result) => {
  console.log(result)
}).catch((error) => {
  console.log(error)     // 打开的是 'failed'
})

所以这个还是挺好理解,不管成功或失败,只返回第一个执行结束的

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐