因此,我使用express.js,並尋找與節點7使用異步/等待。有沒有辦法,我仍然可以捕獲錯誤,但擺脫try/catch塊?也許是一個函數包裝?我不知道這將如何實際執行該函數的代碼,並且還致電next(err)
。有沒有辦法將await/async try/catch塊包裝到每個函數中?
exports.index = async function(req, res, next) {
try {
let user = await User.findOne().exec();
res.status(200).json(user);
} catch(err) {
next(err);
}
}
這樣的事情......?
function example() {
// Implements try/catch block and then handles error.
}
exports.index = async example(req, res, next) {
let user = await User.findOne().exec();
res.status(200).json(user);
}
編輯:
更多的東西與此類似:
var wrapper = function(f) {
return function() {
try {
f.apply(this, arguments);
} catch(e) {
customErrorHandler(e)
}
}
}
這會在一定程度處理try/catch塊,但不工作:
exports.index = wrapper(async example(req, res, next) {
let user = await User.findOne().exec();
res.status(200).json(user);
});
見Is there a way to add try-catch to every function in Javascript?爲非異步的例子。
只需使用快遞,承諾 – Bergi
你無法不使包裝功能部件是異步包裝一個的await。在這種情況下,爲什麼不使用'.then()'和'.catch()'。什麼是「等待」購買你。錯誤處理需要在那裏。你不能只希望它離開一些其他功能。 – jfriend00
我正在尋找方法來消除它們可能需要分叉時的嵌套'then'語句。上面的代碼就是一個示例。 – Neverlax