Javascript 承诺的替代方案。全部解决

Javascript 承诺的替代方案。全部解决,javascript,node.js,es6-promise,Javascript,Node.js,Es6 Promise,我目前正在使用Promise.allSettled等待我的所有承诺完成(无论它们是解决还是被拒绝) 因为我的项目符合节点v12.3.1的要求,所以我不能使用它? 我还可以使用哪些简单的替代方案 示例代码: async function runner() { let promises = []; for(let i=0; i<10; i++) { promises.push(fetcher()) } await Promise.allSettl

我目前正在使用
Promise.allSettled
等待我的所有承诺完成(无论它们是解决还是被拒绝)

因为我的项目符合节点v12.3.1的要求,所以我不能使用它? 我还可以使用哪些简单的替代方案

示例代码:

async function runner() {
    let promises = [];
    for(let i=0; i<10; i++) {
        promises.push(fetcher())
    }
    await Promise.allSettled(promises).then(([results]) => console.log(results.length));
    console.log('continue work...');
}
异步函数运行程序(){
让承诺=[];
for(设i=0;i console.log(results.length));
console.log('continue work…');
}
注意: Promise.allSettled可从
节点版本>12.9
获得

添加垫片也不是一个选项。

有一个小的polyfill技巧,您可以手动执行,以模拟Promise.all的效果

这是片段

if(!Promise.allselled){
Promise.allSettled=承诺=>
我保证(
promises.map((promise,i)=>
承诺
.然后(值=>({
状态:“已完成”,
价值
}))
.catch(原因=>({
状态:“已拒绝”,
原因,,
}))
)
);
}
Promise.allSettled(promises).then(console.log);
这意味着映射所有承诺,然后返回结果,要么成功,要么被拒绝

另一种选择是,如果您不想使用
Promise.all的对象性质,下面的代码片段可能会有所帮助。这很简单,您只需要在这里添加
.catch
方法

const承诺=[
获取('/something'),
获取('/something'),
获取('/something'),
].map(p=>p.catch(e=>e));//这将防止承诺破裂,但与第一个解决方案不同,不会有“结果对象”。
等待承诺。所有(承诺);

“添加垫片也不是一个选项。”那么您希望有什么解决方案?所有这些基本上都是“makeyourown
allSettled
”的变体,我的意思是添加垫片,不允许对package.json进行更改。我对可以添加的小片段持开放态度。nodejs有点新,所以请与我一起分享。选择一个知名的、使用过的和测试过的polyfill,然后复制/粘贴代码,好吗?无论如何,您要添加的所有包都将是开源的。你可以访问他们的GitHub,看看代码是什么。我将替换
。然后(value=>({status:“completed”,value,})).catch(reason=>({status:“rejected”,reason,}))
。然后(value=>({status:“completed”,value,}),reason=>({status:“rejected”,reason,}))
。谢谢!!在StackOverflow中,感谢某人的最好方式是,如果他们的回答对你有帮助,就将其标记为已接受。非常感谢。