我正在尝试将旧的回调样式函数转换为异步等待。但是我无法理解如何捕获未处理的异常。
例如,假设我有一个功能
apiCall(input, function(error, result) {
if (error) {
console.log(error);
} else {
console.log(result);
}
});
我转换为Promise
function test1(input) {
return new Promise(function(resolve, reject) {
apiCall(input, function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
然后我称之为
test1(4)
.then(function(result) {
console.log('Result: ' + result);
})
.catch(function(errorr) {
console.log('My Error: ' + errorr);
});
即使我尝试返回错误,有时此功能也会崩溃。让我们说磁盘错误,JSON解析错误等。我没有处理的一些错误。我只能用
来捕捉这些错误process.on('uncaughtException', function(error) {
console.log('uncaughtException' + error);
});
我有办法用异步等待来捕获各种错误吗?
编辑:这是完整的github回购,供您试用
https://github.com/tosbaha/promise
运行节点testme.js并看到它崩溃并且异常处理程序不运行。
可能崩溃的文件是this任何功能都可能崩溃,但我无法预见到各种错误。这就是为什么我正在寻找一个解决方案来捕获此文件中的错误。
如果您使用node testme.js
在我的仓库中运行代码,您将收到以下错误
results[trackingId] = trackingArray.doesntExist.Something;
^
TypeError: Cannot read property 'Something' of undefined
如您所见,catch
处理程序未捕获错误。
答案 0 :(得分:0)
如果apiCall
在没有调用回调的情况下崩溃(有错误),我认为它会抛出一些错误,可以使用try... catch
块在其外部处理(虽然我不确定,因为我不知道apiCall
)的内部代码。
您可以尝试以下操作:
function test1(input) {
return new Promise(function(resolve, reject) {
try {
apiCall(input, function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
} catch (e) {
// reject the errors not passed to the callback
reject(e);
}
});
}