Javascript JS Promises.all()-如何防止';捕捉';阻止承诺链?

Javascript JS Promises.all()-如何防止';捕捉';阻止承诺链?,javascript,node.js,promise,Javascript,Node.js,Promise,给定一个承诺数组和一个Promise.all()语句,如果其中一个承诺失败,整个链将停止(它不会等待任何后续承诺兑现),Promise.all().catch()将触发,但Promise.all().then()不会触发 但是,如果每个承诺都有自己的“catch”块,并且如果导致承诺失败的任何问题都可以在该catch块中修复,那么我们如何防止其余的承诺被忽略/失败,从而使Promises.all().then()仍将执行?是否有某种方法可以从.catch()块中“否定”错误,从而保证.all()

给定一个承诺数组和一个Promise.all()语句,如果其中一个承诺失败,整个链将停止(它不会等待任何后续承诺兑现),Promise.all().catch()将触发,但Promise.all().then()不会触发

但是,如果每个承诺都有自己的“catch”块,并且如果导致承诺失败的任何问题都可以在该catch块中修复,那么我们如何防止其余的承诺被忽略/失败,从而使Promises.all().then()仍将执行?是否有某种方法可以从.catch()块中“否定”错误,从而保证.all()不会看到它?我在.catch()块的末尾尝试了
返回Promise.resolve()
,但没有成功

例如:

let promise_array = [];

let p = somePromisyFunction1()
    .then(() => { // Do something good })
    .catch(() => { // Handle the bad });
promise_array.push(p);

p = somePromisyFunction2()
    .then(() => { // Do something good })
    .catch(() => { // Handle the bad });
promise_array.push(p);

p = somePromisyFunction3()
    .then(() => { // Do something good })
    .catch(() => { // Handle the bad });
promise_array.push(p);


// ...
// More Promisy functions added to promise_array here...
// ...

Promise.all(promise_array)
    .then(() => { // We're all done! All promises fulfilled. })
    .catch(() => { // Something went wrong! });
在本例中,如果somePromisyFunctionX()中的任何一个失败,则该函数的.catch()子句将执行,然后Promise.all.catch()子句也将立即执行,而无需等待任何后续承诺兑现

但是,如果我们能够修复在单个函数的.catch()子句中发生的任何不好的事情,那么我们如何防止立即触发Promissions.all().catch(),而允许其他承诺继续并实现呢?在某种程度上,在.catch()子句中,我们是否可以“否定”错误,这样看起来承诺实际上成功地实现了,而不是看起来失败了


我可以使用try/catch块在异步/wait函数中执行此操作,但不确定如何使用.then/.catch来执行此操作。

是的,您需要做的只是
从失败承诺的捕获中返回
一些内容,它将作为
承诺中的解决方案“恢复”。all

希望这能证明这一点。如果没有
somePromisyFunction2
中的
catch
,整个链将失败(通过注释进行检查),但有了它,整个链将以恢复的值成功

让promise_数组=[];
设p=somePromisyFunction1()
//.然后(()=>{//做点好事})
//.catch(()=>{//处理坏的});
promise_数组push(p);
p=somePromisyFunction2()
//.然后(()=>{//做点好事})
.渔获物((v)=>“2-”+v);
promise_数组push(p);
p=somePromisyFunction3()
//.然后(()=>{//做点好事})
//.catch(()=>{//处理坏的});
promise_数组push(p);
// ...
//更多Promisy函数添加到promise\u数组中。。。
// ...
Promise.all(Promise\u数组)
.then((v)=>{console.log(“一切正常”,v)})
.catch(()=>{console.log(“坏东西”)});
函数somePromisyFunction1(){
返回新承诺(resolve=>resolve(“1”));
}
函数somePromisyFunction2(){
返回新承诺((决心,拒绝)=>拒绝(“哦,不,出了什么问题!”);
}
函数somePromisyFunction3(){
返回新承诺(resolve=>resolve(“3”));

}
您的基本断言不正确。如果您有
.catch()
处理程序,
Promise.all()
将不会以这种方式运行。。你能举一个失败的例子吗?
Promise.allsetted
只是等待所有的承诺都得到解决,不管结果如何。请告诉我们你的“
//处理坏的
*”到底做了什么,并提供一个例子,也许你实际做的是
const p=somePromisyFunction1();promise_数组push(p);p、 捕获(()=>{…})`