如何处理自己生成的错误以及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和在代码执行过程中可能出错的所有不同的事情?
发布于 2017-10-05 19:16:27
在特定情况下,您将抛出一个简单的字符串异常,因此您必须查看该值。
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');
}
});这样做的好处是将消息从测试中分离出来,以确定它是否是您的错误。
https://stackoverflow.com/questions/46593100
复制相似问题