筛选/恢复Promise.all结果

Filter/recover Promise.all result

本文关键字:all 结果 Promise 恢复 筛选      更新时间:2023-09-26

示例:

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

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

是否有恢复所有其他已解析值的方法?

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

否则,这个简单的函数将为您提供所有承诺的结果,并告诉您是成功还是失败。然后,你可以对成功或失败的承诺做任何你需要做的事情。

/**
 * 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 }
  });