![](/img/trans.png)
[英]Promisification by using resolve or reject or with Promisify (bluebird)
[英]Resolve *and* reject all promises in Bluebird
我正在寻找从promise数据中得到解决方案和拒绝的方法。 我目前依赖Bluebird实现,因此ES6兼容解决方案也适合。
想到的最好的事情就是使用Bluebird的Promise.settle
,我认为承诺检查是一个不必要的复杂问题:
let promises = [
Promise.resolve('resolved'),
Promise.resolve('resolved'),
Promise.reject('rejected')
];
// is there an existing way to do this?
let resolvedAndRejected = Promise.settle(promises)
.then((inspections) => {
let resolved = [];
let rejected = [];
inspections.forEach((inspection) => {
if (inspection.isFulfilled())
resolved.push(inspection.value());
else if (inspection.isRejected())
rejected.push(inspection.reason());
});
return [resolved, rejected];
});
resolvedAndRejected.spread((resolved, rejected) => {
console.log(...resolved);
console.error(...rejected);
});
对于100%履行率不是选项或目标的情况来说,这似乎是一项微不足道的任务,但我甚至不知道食谱的名称。
是否有一种简洁且经过充分验证的方法来处理Bluebird或其他承诺实现 - 内置运算符或扩展?
OP提出补充完整性的答案。 这是我要做的:
const res = Promise.all(promises.map(p => p.reflect())) // get promises
.then(values => [
values.filter(x => x.isFulfilled()).map(x => x.value()), // resolved
values.filter(x => x.isRejected()).map(x => x.reason()) // rejected
]);
没有内置的东西,但reduce
可以使它非常简洁:
Promise
.settle(promises)
.reduce(([resolved, rejected], inspection) => {
if (inspection.isFulfilled())
resolved.push(inspection.value());
else
rejected.push(inspection.reason());
return [resolved, rejected];
}, [[], []]);
您可以使用Promise.all()
,处理被拒绝的Promise
, return
reason
或其他值return
到链接.then()
let promises = [ Promise.resolve("resolved"), Promise.resolve("resolved"), Promise.reject("rejected") ] , results = {resolved:[], rejected:[]} , resolvedAndRejected = Promise.all( promises.map((p) => { return p.then((resolvedValue) => { results.resolved.push(resolvedValue); return resolvedValue }, (rejectedReason) => { results.rejected.push(rejectedReason); return rejectedReason }) })); resolvedAndRejected.then((data) => { console.log(data, results) });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.