在Javascript中等待函数时捕获错误的正确方法
在我的函数中我不能捕捉到拒绝。我在谷歌搜索过,但还没有找到解决方案,所以请帮我编写以下代码:在Javascript中等待函数时捕获错误的正确方法,javascript,promise,try-catch,settimeout,es6-promise,Javascript,Promise,Try Catch,Settimeout,Es6 Promise,在我的函数中我不能捕捉到拒绝。我在谷歌搜索过,但还没有找到解决方案,所以请帮我编写以下代码: async function errorFunc(){ setTimeout(() => { return Promise.reject("Any error occured!"); }, 1000); } async function main(){ await errorFunc().catch((error)=>{
async function errorFunc(){
setTimeout(() => {
return Promise.reject("Any error occured!");
}, 1000);
}
async function main(){
await errorFunc().catch((error)=>{
console.log("E in catch:", error);
});
try{
await errorFunc();
}catch(e){
console.log("E in try-catch:", e);
}
}
main();
主函数中的catch没有一个起作用……在控制台中,仅打印两次此错误消息:
毫无疑问,任何错误都会发生
我想抓住那个错误,或者最好说拒绝承诺。在我的主要功能中如何实现这一点
谢谢 异步函数errorFunc{
返回新PromiseSolve,reject=>setTimeout=>rejectAny error!发生错误,1000
}
这就是你想要的
回调将在全局中执行,没有人捕获它。我认为它打印了两次相同的错误,因为在第二个函数中:
try{
await errorFunc();
}catch(e){
console.log("E in try-catch:", error);
}
}
你打印了错误,但抓住了e,我不太理解这个问题,但我想这就是它打印两次的原因
可能用e交换错误以打印捕获的其他错误您必须从函数返回承诺
async function errorFunc(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
return reject("Any error occured!");
}, 1000);
})
}
async function main(){
await errorFunc().catch((error)=>{
console.log("E in catch:", error);
});
try{
await errorFunc();
}catch(e){
console.log("E in try-catch:", e);
}
}
您的errorFunc没有返回您拒绝的承诺,因此无法捕获它。类似的东西应该可以返回新的PromiseSolve,reject=>setTimeout=>reject'Any error Occessed!',1000;你是对的,现在它起作用了。但是——有没有办法不回报承诺?为什么我不想退货?因为它是另一个使代码可读性降低的包装器。。。我认为当我将函数声明为async时,它自动意味着它是Promise。。。所以我可以简单地称之为承诺。在它里面拒绝,它的行为就像正常的承诺一样……有没有办法做到我想要的?使用Promise.reject而不返回承诺。是的,async使其返回承诺。但如果您不在该函数中的任何地方使用wait,那么在这种情况下,该承诺将立即得到满足。无论你在超时时间做什么,都与承诺无关。如果您想在超时时保留一个句柄,则需要显式返回自制的承诺,这样您就可以解决它或拒绝它。此+如中所述王仁宏'你是对的,我有错误,我应该打印e,而不是错误,但这不是我要寻找的…我希望这有帮助,至于另一个问题,我没有提到它,因为我不知道答案,但我认为我应该提到它,因为你说它打印了两次
async function errorFunc(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
return reject("Any error occured!");
}, 1000);
})
}
async function main(){
await errorFunc().catch((error)=>{
console.log("E in catch:", error);
});
try{
await errorFunc();
}catch(e){
console.log("E in try-catch:", e);
}
}