gpt4 book ai didi

javascript - Sailsjs : Why is *return* used or not in the following code?

转载 作者:行者123 更新时间:2023-11-30 05:38:45 25 4
gpt4 key购买 nike

我不清楚为什么在以下代码中使用或 return。请解释何时应该和不应该使用它或要求它返回响应。

  update: function(req, res) {
var id = req.param('id');
User
.update(id, req.params.all())
.exec(function(err, users) {
if(err) return res.json(err, 400);
var user = users[0];
console.log('ID', user.id);
User
.findOne(user.id)
.populate('profile')
.exec(function (err, user){
if (err) return res.json(err, 400);
res.json(user, 201);
});
});
},

最佳答案

return 在相关代码中使用,而不是 else。代码可以重写为:

update: function(req, res) {
var id = req.param('id');
User
.update(id, req.params.all())
.exec(function(err, users) {
if(err) {res.json(err, 400);}
// note the lack of "return" above, because in the case of an error
// the code below will never run
else {
var user = users[0];
console.log('ID', user.id);
User
.findOne(user.id)
.populate('profile')
.exec(function (err, user){
if (err) {res.json(err, 400);} // again, no return
else {res.json(user, 201);}
});
}
});
};

但这需要您跟踪更多的大括号,而且效率可能较低(尽管在这些情况下 v8 可能优化了 else)。当涉及回调时,您还会看到经常使用此约定:

function (req, res, next) {

if (!req.session.loggedInUser) {
return res.forbidden();
}

return next();

}

同样,您可以使用 else 重写:

function (req, res, next) {

if (!req.session.loggedInUser) {
res.forbidden();
} else {
next();
}

}

请注意这里的一个重要区别:在 elseless 代码中,如果您遗漏了第一个 return 就会遇到麻烦,因为您将发送 res.forbidden 响应 执行next() 方法,这几乎肯定是您不想要的。另一方面,在 returnless 代码中,如果您要在 if/else 之后添加更多代码,则无论 什么,你也不想要。因此,一个好的约定是在您使用回调(如 next())或执行将向客户端发送完整响应的代码(如 res.sendres.json).

关于javascript - Sailsjs : Why is *return* used or not in the following code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075946/

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