Javascript “我怎么能?”;扔;“内部”;捕获;由外部机构处理被拒绝承诺的方法;捕获;博克?
这起作用了强>Javascript “我怎么能?”;扔;“内部”;捕获;由外部机构处理被拒绝承诺的方法;捕获;博克?,javascript,node.js,error-handling,try-catch,throw,Javascript,Node.js,Error Handling,Try Catch,Throw,这起作用了 函数拒绝承诺(){ 退回承诺。拒绝(“错误”); } 异步函数someFunction(){ 试一试{ 拒绝承诺 .catch((err)=>console.log(err));//它可以工作!错误记录在这里 } 捕捉(错误){ 控制台日志(err); } } someFunction()正如注释中指出的,如果您在异步函数中,则无需使用.catch()。我不知道您为什么想要嵌套的try…catch,但看起来这样可以实现您想要的: function rejectedPromise()
函数拒绝承诺(){
退回承诺。拒绝(“错误”);
}
异步函数someFunction(){
试一试{
拒绝承诺
.catch((err)=>console.log(err));//它可以工作!错误记录在这里
}
捕捉(错误){
控制台日志(err);
}
}
someFunction()
正如注释中指出的,如果您在异步
函数中,则无需使用.catch()
。我不知道您为什么想要嵌套的try…catch
,但看起来这样可以实现您想要的:
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
try {
await rejectedPromise()
}
catch(err) {
throw err;
}
}
catch(err) {
console.log(err);
}
}
someFunction();
如果要使用
try/catch
,可能应该使用wait
。.catch()
是一个承诺API。如果承诺链真的会爆炸出错误,那么整个承诺链构造将是无用的。对。要么是.catch
,它是“promise async exception handler”,要么是try..wait..catch
,它是围绕前者的语法糖,使其看起来更同步。你不能同时使用这两种方法,我不知道。我真的以为我可以把它们混在一起。谢谢你们两位。好吧,如果可以的话,那么接下来会发生什么:承诺。然后(a)。然后(b)。然后(c)。然后(d)。然后(e)
。如果,比如说,b
抛出,那么您需要处理它。但是c
或d
也可以抛出。您必须在try/catch
中包围整个链,并尝试找出如何恢复(并非微不足道),或者,用try/catch
包围链中的每个链接,这是一个很大的噪音。如果你能从一个问题中恢复过来并想继续这个链条,那也不好。至于“为什么”:现在同步执行.try..catch
代码,然后/.catch
发生在承诺解决后的某个时候。到那时,代码将在try..catch
上下文之外很长。