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

  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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐