Обновление параметров в setInterval () - параметры не обновляются - PullRequest
0 голосов
/ 12 октября 2018

Это будет мой последний вопрос, если я получу ответ.У меня есть программа nodeJS, которая работает идеально.Тем не менее, я, кажется, застрял в конце цикла.Я полагаю, что причина этого заключается в том, что я основываю, когда нужно убить мой цикл из элемента базы данных, который подается в функцию через setInterval().

Этот параметр, скажем, установлен на 0 и повышен до 1 наконец сценария всегда начинается с 0 снова при вызове функции setInterval.Он обновляется в базе данных и в скрипте в конце функции, но при перезапуске функции он имеет исходное значение.Любые идеи, чтобы это исправить?

Мой код

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; не обновляется, и каждый раз получает 0 из базы данных, когда порог в базе данных увеличивается и обновляется до 1 во время функции doSomething().

Еще раз спасибо за любую помощь заранее!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

очень просто,

инициализируют вашу переменную в начале этой страницы, вне запроса get.

0 голосов
/ 13 октября 2018

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 };

Итак, я предполагаю, что вы предоставляете null или undefined для функции обновления базы данных, иэто на самом деле не обновление пользователя.Затем я поспорю, что где-то по пути, когда вы запрашиваете и предоставляете данные для вашего запроса на locals.user, он просто всегда находит 0, потому что вы его не обновляете.

Кроме того, вытакже тянет тонну информации с вашего response объекта, а не с request ...

...