【问题标题】:Filter/recover Promise.all result过滤/恢复 Promise.all 结果
【发布时间】:2017-02-10 01:36:39
【问题描述】:

例如:

function myFunc(args ...){
  ...
  return Promise.all(myPromisesArray)
}

如果myPromisesArray 中的promise 失败,我只会在返回值中得到拒绝原因。

有没有办法恢复所有其他已解析的值?

【问题讨论】:

  • 你控制你正在执行的承诺吗?
  • 结果?不,这是任意的。
  • 不,我的意思是你是在为 Promise 编写代码。如果您不调用拒绝函数并返回结果。一旦发生故障,Promise 将失败并停止执行
  • 啊不。我没有那个控制权。

标签: javascript es6-promise


【解决方案1】:

如果您使用的是 Q,那么有一个名为 Q.allSettled 的函数基本上可以满足您的要求。

否则,这个简单的函数会给你所有个promise的结果,并告诉你是成功还是失败。然后,您可以对成功或失败的 Promise 做任何您需要做的事情。

/**
 * When every promise is resolved or rejected, resolve to an array of
 * objects
 *   { result: [ Promise result ], success: true / false }
**/
function allSettled(promises) {
  return Promise.all(
    promises.map(
      promise => promise.then(
        // resolved
        (result) => ({ result: result, success: true }),
        // rejected
        (result) => ({ result: result, success: false })
      )
    )
  );
}

// example usage:
const one = Promise.resolve(1);
const two = Promise.reject(2);
const three = Promise.resolve(3);

allSettled([ one, two, three ])
  .then((results) => {
    console.log(results[0]); // { result: 1, success: true }
    console.log(results[1]); // { result: 2, success: false }
    console.log(results[2]); // { result: 3, success: true }
  });

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 2020-08-24
    • 2012-07-08
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多