Filter/recover Promise.all 结果
Filter/recover Promise.all result
例如:
function myFunc(args ...){
...
return Promise.all(myPromisesArray)
}
如果 myPromisesArray
中的承诺失败,我只会在 return 值中得到拒绝原因。
有没有办法恢复所有其他已解析的值?
如果您使用的是 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 }
});
例如:
function myFunc(args ...){
...
return Promise.all(myPromisesArray)
}
如果 myPromisesArray
中的承诺失败,我只会在 return 值中得到拒绝原因。
有没有办法恢复所有其他已解析的值?
如果您使用的是 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 }
});