Promise.all 使用

Promise.all 使用

Promise.all(iterable)方法返回一个 Promise 实例。

简单总结一下:

  • 只有参数内所有的promise返回resolve,才会返回resolve
  • 参数中有一个失败rejected,就返回rejected.原因是第一个失败rejected的结果

Promise.all 在任意一个传入的 promise 失败时返回失败

一般使用1

var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([p1, p2, p3]).then(values => {
  console.log(values); // [3, 1337, "foo"]
});

使用场景2

批量支付订单的一个场景,一个订单的支付失败不能影响其他订单的支付,统一处理有失败的场景全部成功之后再通知已经支付成功。

Promise.all()其中的一个请求失败了就会走catch,此时无法满足请求全部结束的需求。

就改写一下参数中的promis

    const temp = payData.map((item, index) => {
      let data = {
        OrderNo: item.OrderNo
      };
      return queryService
        .fetch(actionService.order.pay, data)
        .then(res => {
          if (res.RetCode === 0) {
            return (item.PayTag = "yes");
          }
          return (item.PayTag = "no");
        })
        .catch(err => (item.PayTag = "no"));
    });

    // 用yes或者no来标志是否执行成功

       Promise.all(temp)
      .then(res => {
        if (res.indexOf("no") == -1) {
          // 有错误提示
          return this.props.changeRoute(backUrl);
        }

        let data = [];
        payData.forEach(item => {
          if (item.PayTag === "no") {
            data.push(item);
          }
        });

        return this.setState({ isLoading: false, payData: data });
      })
      .catch(err => {
        let data = [];
        payData.forEach(item => {
          if (item.PayTag === "no") {
            data.push(item);
          }
        });
        return this.setState({ payData: data, isLoading: false });
      });

你可能感兴趣的:(javascript,node.js)