如何在Javascript承诺中处理您自己生成的错误以及库/未处理的异常?我面临的问题是由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()
链中可能出现很多问题,外部库可能会抛出异常等等。例如,我想在发生这种情况时打印“通用错误”。
但是我也希望验证代码并提前退出(就像我在示例中所做的那样)并且在这种情况下实际打印我自己的消息“我自己的错误”。
如何处理我的“退出早期”throw
和所有不同的事情,而不是在执行代码时出错?
答案 0 :(得分:1)
在您的特定情况下,您抛出一个简单的字符串异常,因此您必须查看该值。
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');
}
});
这样做的好处是可以将消息与测试分离,以确定是否是您的错误。