Typescript -从异步方法中抛出错误的Promise中捕获错误



在Promise中抛出错误,即使是在异步方法中,最好通过reject (new Error('message'));

我如何捕获一个错误,是一个异步方法抛出在一个承诺?

目的:当一个(运行时)错误发生在异步方法(在一个承诺),我怎么能最好地处理这个?

简化示例我会告诉你我到底是什么意思:

const myPromise = new Promise( ( resolve, reject ) => {
setTimeout( () => {
// Simulating an Error in an Asynchronous method ...
throw new Error('Something bad happened');
}, 1000);
} );
console.log( 'Started');
try {
myPromise
.then( res => console.log( res) )
.catch( err => console.log( 'Promise.catch: ' + (err as Error).message))
.finally( () => console.log( 'All done') );  
} catch( error) {
console.log( 'Error in promise catched: ' + (error as Error).message);
}
console.log( 'Ended');

与此同时,我发现了一篇很棒的文章:

异步调用的回调函数发生运行时错误(在executor函数内),那么错误将不会被捕获

所以,解决方案就是把一个try catch块在异步方法,如果你怀疑它给运行时异常/错误?

const myPromise2 = new Promise( ( resolve, reject ) => {
setTimeout( () => {
try {
throw new Error(' 2 - Simulating something real bad happened');
}
catch( erx) {
reject( ' 2 - In promise error: ' + (erx as Error).message);
}
}, 100);
} );

答案是@bryan60在评论中。所以如果@bryan60提供了答案,我很乐意删除这个。

@bryan60在评论中写道:"你帖子中的解决方案是正确的。"Try/catch inside the promise.">

所以,解决方案在代码中:

const myPromise2 = new Promise( ( resolve, reject ) => {
setTimeout( () => {
try {
throw new Error(' 2 - Simulating something real bad happened');
}
catch( erx) {
reject( ' 2 - In promise error: ' + (erx as Error).message);
}
}, 100);
} );

相关内容

  • 没有找到相关文章

最新更新