gpt4 book ai didi

javascript - 错误处理的函数式方法

转载 作者:行者123 更新时间:2023-11-30 12:44:24 25 4
gpt4 key购买 nike

我在这里找到了这个片段:http://www.nodewiz.biz/nodejs-error-handling-pattern/

它应该比 node.js 中的正常方式更好地处理错误。但我无法理解它是如何工作的,以及为什么它比普通的if(err)更好?


功能方法

使用 Express.js 框架的示例,定义一个返回错误处理程序的函数:

function error(res,next) {
return function( err, result ) {
if( err ) {
res.writeHead(500); res.end(); console.log(err);
}
else {
next(result)
}
}
}

它允许您这样做;

app.get('/foo', function(req,res) {
db.query('sql', error(res, function(result) {
// use result
}));
});

此方法仅作为示例介绍,请勿将此方法用于生产代码,除非您确实正确处理了错误。

最佳答案

"It supposed to handle errors better than normal way in node.js. But I fail to understand how it works..."

它的工作原理是它接收 res 对象和一个函数(由您提供),如果结果成功,该函数将被调用。

然后它返回一个函数,该函数作为回调传递给 db.query()。因此回调实际上接收到 errresult

如果发现 err,它会为您发送适当的 500 响应。如果没有发现错误,它会调用您提供的函数并将 result 传递给它。这样你就知道如果你提供的函数运行了,那是因为没有错误。


"...and why it is better than plain if(err)?"

这不是更好。只是不同而已。如果错误处理始终相同,那就太好了,因为您可以在一处更新它,并且使用它的任何代码都将从更新中受益。

但是,一个简单的函数抽象也可以做同样的事情。

function error(res, err) {
if( err ) {
res.writeHead(500); res.end(); console.log(err);
return true
}
return false
}

它允许您这样做;

app.get('/foo', function(req,res) {
db.query('sql', function(err, result) {
if (error(res, err))
return;

// use the result
}));
});

关于javascript - 错误处理的函数式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116305/

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