如何处理自己产生的错误以及Javascript Promise中的库/未处理的异常?我所面临的问题是由Promise的catch()
方法的“包罗万象”性质引起的。
例如,我有以下代码:
somePromiseFunction()
.then(result => {
// External library or behaviour
someCodeThatCanThrowExceptions()
if (result.code === 1) {
throw 'My own exception'
}
})
.catch(err => {
// how do I know if this is an exception I don't know or something
// that I do want to actually handle?
});
then()
链中很多事情可能出错,外部库可能引发异常等。例如,当发生这种情况时,我想打印“ Generic error”。但是我也想验证代码并尽早退出(就像我在示例中所做的那样),在这种情况下,实际上打印我自己的消息“我自己的错误”。
如何处理我的“提前退出”
throw
和代码执行过程中可能出错的所有不同东西? 最佳答案
在您的特定情况下,您将引发一个简单的字符串异常,因此您必须查看该值。
function go() {
return new Promise(function(resolve, reject) {
throw 'My Exception';
});
}
const x = go()
.then(function() {
})
.catch(function(ex) {
if (ex === 'My Exception') {
alert('It was mine');
}
});
如果创建更多专门的异常,则可以测试类型,而不是确切的字符串。以下是一个示例,该示例遵循可以被类型测试的
window.Error
模式(即,它具有名称和消息):var MyError = (function() {
function MyError(message) {
this.message = message;
this.name = 'MyError';
}
return MyError;
}());
function go() {
return new Promise(function(resolve, reject) {
throw new MyError('Something went wrong');
});
}
const x = go()
.then(function() {
})
.catch(function(ex) {
if (ex instanceof MyError) {
alert('It was mine');
}
});
这样做的好处是可以将您的消息从测试中分离出来,以确定是否是您的错误。
关于javascript - promise 处理的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46593100/