JavaScript承诺-多个承诺失败时的逻辑

JavaScript承诺-多个承诺失败时的逻辑,javascript,promise,control-flow,Javascript,Promise,Control Flow,如果一组承诺(全部)被拒绝,我如何应用逻辑 扩大我的问题:是否建议使用Promise.reject()对JavaScript应用程序进行正常的流控制,或者只在出现问题时使用它 用例:my nodeJs应用程序从客户端接收uuid,并根据匹配的资源(示例中的用户或汽车)进行响应。您可以从.catch()返回已解析的承诺,将这两个函数传递给承诺。all()然后在chained处检查结果。然后(),在处传播错误。然后()如有必要 var validUserIdPromise=()=>Promise.

如果一组承诺(全部)被拒绝,我如何应用逻辑

扩大我的问题:是否建议使用Promise.reject()对JavaScript应用程序进行正常的流控制,或者只在出现问题时使用它


用例:my nodeJs应用程序从客户端接收uuid,并根据匹配的资源(示例中的用户或汽车)进行响应。

您可以从
.catch()
返回已解析的
承诺
,将这两个函数传递给
承诺。all()
然后在chained
处检查结果。然后()
,在
处传播错误。然后()
如有必要

var validUserIdPromise=()=>Promise.reject(“非用户id”)
。然后(()=>console.log(“用户id”))
//处理错误,返回已解决的“承诺”`
//也可以选择在此处检查错误类型,以达到“throw”
//`.catch()`链接到`.then()`如果任何`承诺'被拒绝
.catch((err)=>{console.error(err);返回err});
var validCarIdPromise=()=>承诺.拒绝(“非车辆id”)
.然后(()=>console.log(“汽车id”))
//处理错误,返回已解决的“承诺”`
.catch((err)=>{console.error(err);返回err});
Promise.all([validUserPromise(),validCarIdPromise()]))
。然后(响应=>{
如果(响应[0]=“非用户id”
&&响应[1]=“非车辆id”){
log(“两个承诺都被拒绝”)
}
})
.catch(err=>console.error(err))
//返回一个承诺,在该承诺中,无论id是否存在,都在解析值中注入true或false
const validUserIdPromise=checkValidUserId(id)
.然后(()=>真)
.catch(()=>false)
//同样的
const validCarIdPromise=checkvalidcard(id)
.然后(()=>真)
.catch(()=>false)
//解决两个承诺
承诺。全部([有效的口头承诺,有效的口头承诺])
。然后(([validUser,validCar])=>{//Promise.all注入一个值数组->使用解构
console.log(validUser?'user id':'not user id')
console.log(validCar?'car id':'not car id')
})
/**使用异步/等待*/
异步函数检查id(id){
const[validUser,validCar]=等待承诺。全部([validUser,validCarIdPromise]);
console.log(validUser?'user id':'not user id')
console.log(validCar?'car id':'not car id')
}
支票id(id);

您是否试图确定
validUserPromise
validCarIdPromise
是否都被拒绝?如果只有一个
承诺被拒绝,会发生什么?是的,我正在努力确定。只有我的2美分;如果您拒绝“未找到”,但“未找到”是预期结果,我认为最好使用特殊的“未找到”值来解决。让承诺在意外的结果中失败,这样您就可以更容易地区分这两种情况。“未找到”中的承诺可以遵循愉快的路径,但意外错误可以遵循捕获路径。这个问题应该伴随着
checkValid…
函数,因为我想这就是你的问题所在。如果找不到某个东西,它是否应该拒绝。Promise.all拒绝,原因是第一个拒绝的承诺。@PunithJain A chained
.catch()
处理拒绝如果
validUserPromise()
承诺被拒绝,它为什么不接受承诺。all?@PunithJain拒绝在
.catch()处理
在函数中。从
.catch()
导出的值
返回
是已解析的
承诺
,即使该值是
错误的实例
.then()
.catch()
都返回一个新的
承诺
@PunithJain请参见
validUserIdPromise = checkValidUserId(id)
  .then(() => console.log("user id")
  .catch(() => console.log("not user id")

validCarIdPromise = checkValidCarId(id)
  .then(() => console.log("car id")
  .catch(() => console.log("not car id");

// TODO how to call this? console.log("neither user nor car");