在setInterval()中更新参数-参数不会更新

时间:2018-10-12 20:09:32

标签: javascript node.js mongodb mongoose setinterval

这是我的最后一个问题,如果我收到答复。我有一个nodeJS程序,该程序可完美运行。但是,我似乎最后陷入了循环。我相信这样做的原因是因为我决定何时终止通过setInterval()输入到函数中的数据库项循环。

此参数(例如设置为0,并在脚本末尾升至1)在调用setInterval函数时始终始终从0开始。它会在数据库中更新,并在函数末尾的脚本中更新,而ut在函数重新启动时具有原始值。有解决此问题的想法吗?

我的代码

router.get('/run', function(req, res) {
  console.log("res.locals.user.username);


  const receiver = res.locals.user.email;
  // let threshold = parseInt(res.locals.user.threshold);
  const check_rate = parseInt(res.locals.user.checkRate);
  const email = res.locals.user.Login;
  const password = res.locals.user.Password;
  const props = {
    var1,
    var2
  };

  const switches = "";


  adduser.find({
    ownerUsername: res.locals.user.username
  }).then(function(results) {
    res.render('index', {
      var12: results
    });

    setInterval(function() {
      let threshold = parseInt(res.locals.user.threshold);

      doSomething(threshld, check_rt, email, password, var1,);
    }, 10 * 1000);
    // console.log("restarting function \n Threshold value is " +res.locals.user.threshold);
  })

});


function doSomething(Threshold, checkRate, email, password, var1, receiver, switches) {
  console.log("Running dosomething() Now");



      if (res.total_missed >= Threshold) {
        console.log(res.total_missed);
        console.log("res.total_missed is = " + res.total_missed);


        Threshld++
        User.update({
          var1: var1
        }, {
          thrshld: Threshld,

        }, function(err, res) {
          //handle it
        })
        doSomethingElse(password, email, props);




      }
    }
  })
}

好的,是的,这是我的代码的最佳示例,我无需复制粘贴就可以制作代码。这里的问题是,let Threshold = res.locals.user.threshold;行没有被更新,并且每次在doSomething()函数期间数据库中的阈值递增并更新为1时,都从数据库中将其拉为0。

再次感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

let Threshold = res.locals.user.threshold;未从数据库中提取。您正在将其从响应对象中拉出来...

因此,您应该问自己,为什么0通过网络发送到GET端点?还有为什么在响应中?

此外,您确定要更新数据库中的用户吗?这是我看到的:

function doSomething(Threshold, checkRate, email, password, var1, receiver, switches) {
  console.log("Running dosomething() Now");
  console.log("Threshold in Start of Check Function is = " + Threshold);



      if (res.total_missed >= Threshold) {
        console.log(res.total_missed);
        console.log("res.total_missed is = " + res.total_missed);


        Threshold++
        User.update({
          username: var1      // <--- searches for username given some param: var1
        }, {
          threshold: Threshold,  /// < ---- updates this user property with this new value

        }, function(err, numberAffected, rawResponse) {
          //handle it
        })

因此,您可以通过var1来吸引用户。让我们看一下如何注入该用户: doSomething(threshold, check_rate, email, password, var1, receiver, switches);

因此,您直接传递var1。完全不知道var1代表什么。错误的命名约定。除了...在哪里设置?根据您提供的代码,我看到的唯一另一件事是: const props = { var1, var2 };

因此,我的猜测是您要向数据库更新功能提供nullundefined,但实际上并没有更新用户。然后,我进一步打赌,在您查询locals.user并向您的请求提供数据时,总是会发现0,因为您没有更新它。

此外,您还将从response对象中获取大量信息,而不是request对象中的

答案 1 :(得分:0)

非常简单

在此页面的开头(在get请求之外)初始化变量。