请问已经调用了return , 但是下面的步骤依然会执行,是异步还是逻辑出错?
发布于 10 年前 作者 youqingkui 3566 次浏览 最后一次编辑是 8 年前

这是我的一个判断函数,如果发现条件成立则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()
}
回到顶部