承诺处理错误
问题描述:
如何处理自己生成的错误以及Javascript承诺中的库/未处理的异常?我面临的问题是由承诺方法的“全部”性质产生的。承诺处理错误
举例来说,我有以下代码:
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
s和所有不同的事情,而不是在执行代码期间可能出错?
答
在你的具体情况下,你抛出一个简单的字符串异常,所以你必须看看值。
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');
}
});
这具有从测试去耦邮件的益处以确定它是否是你的错误与否。
让.catch中的代码检查'if(err ==='我自己的异常')'后面跟着你的自定义处理程序,其次是一般处理程序吗? –
不要宣传[此图书馆](https://github.com/AlexanderMac/n-custom-errors),但它可以满足你的需求。给出了注册自定义错误的可能性,并检查抛出的错误是否是自定义错误。 – alexmac
[永远不会抛出字符串。](https://stackoverflow.com/a/26020867/1048572) – Bergi