请问已经调用了return , 但是下面的步骤依然会执行,是异步还是逻辑出错?
这是我的一个判断函数,如果发现条件成立则return到跳转链接。
function checkValue(req, res) {
if (isNaN(req.body.goodsPrice) || isNaN(req.body.originalPrice)) {
req.session.error = '商品价格必须为数字';
console.log('..........................');
return res.redirect('/server');
}
}
然后再到这里调用这个函数,但是已经触发了条件并且return却依旧会往下执行。是异步导致吗?谢谢?
router.post('/server/:goods_id', function (req, res) {
...
checkValue(req, res);
var url = 'http://localhost:5001/admin/seller/goods/edit';
var options = {
url: url,
headers: {
'Cookie': 'session=' + req.cookies.session
},
form: goods
};
request.post(options, function (err, response, body) {
if (err) {
return console.log(err);
}
var data = JSON.parse(body);
console.log(data);
});
});
6 回复
checkValue内部return了,调用checkValue的函数没有return啊
@ravenwang 试了下,改为了 return checkValue(req, res); 依旧会往下执行。
@ravenwang 嗯,如果这样调用的话那么如果没有触发条件也不会往下执行了啊?
@youqingkui 你需要重新思考代码逻辑,比如checkValue返回true/false表示检查是否通过
@ravenwang 嗯,试了,如果时函数放回值的话ok,但还是有些不太明白,为什么要这样。在函数里应该也是一样的吧?
是因为checkValue没有next- -。
执行顺序 post('/server') -----> checkValue -----> redirect('/server') -----> checkValue -----> ...
这样当然会没玩没了。
按照我对你的业务逻辑的理解,应该这么写。
function checkValue(req, res, next) {
if (isNaN(req.body.goodsPrice) || isNaN(req.body.originalPrice)) {
req.session.error = '商品价格必须为数字';
console.log('..........................');
return res.redirect('/server');
}
next()
}