gpt4 book ai didi

javascript - 使用 Node.js/promises 按类型捕获异常

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:13 25 4
gpt4 key购买 nike

有以下代码:

router.put('/:id', function(req, res, next) {
models.Task.find(req.params.id).then(function(task) {
return task.updateAttributes({
title: req.body.title,
description: req.body.description
});
}).then(function(task) {
res.json(task);
}).catch(function(err) {
var err = new Error('Cannot find Task');
err.status = 404;
next(err);
});
});

如您所见,我使用此路由通过 id 更新任务模型。因此,现在如果没有带有 id 的任务,我会捕获错误,并且尝试更新 null 对象的属性(ReferenceError 错误类型)。因此,我刚刚向任务模型添加了验证,并且有机会使用空标题/描述(SequelizeValidationError 错误类型)更新任务。如何在 catch block 中处理此错误?我想为此错误设置“找不到任务”、“无法更新任务”消息。我应该分割我的 catch block ,还是其他什么?提前致谢!

最佳答案

如果您不愿意使用像 bluebird 这样加速和增强原生 Promise API 的库,您可以自己构建一些功能:

function errT(type, fn){
return function(err){ // create a handler for errors
if(!(err instanceof type)) throw err; // allow fallthrough if it doesn't match
return fn(err);
};
}

或者类似的 ES2015 语法:

let errT = (type, fn) => err => (err instanceof type) ? Promise.reject(err) : fn(err);

这可以让你做,例如:

promiseReturningFn().
catch(errT(TypeError, handleTypeError)).
catch(errT(ReferenceError, handleReferenceError));

强烈建议您将 Error 子类化为您自己的类型,提供附加信息并捕获这些信息。我发现这是我自己的代码中非常积极的做法,它有助于避免意外捕获程序员错误(而不是应用程序错误)。

关于javascript - 使用 Node.js/promises 按类型捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com