Пытаясь обновить пользовательские баллы каждые X, устанавливает все их баллы на неопределенные - PullRequest
0 голосов
/ 04 мая 2019

В настоящее время я пытаюсь обновлять все пользовательские баллы каждую 1 минуту (в настоящее время 5 секунд для целей тестирования), когда я пытаюсь запустить его, он получает всех пользователей, но затем устанавливает их баллы на неопределенные.

  setInterval(async function () {
    var uPoints;
    await db.each("SELECT points points, id id FROM users", function (err, row) {
      if (err) {
        console.log(err);
      }
      var u;
      for (u in client.users.array()) {
        uPoints = row.points + 10;
      }
    });
    var u, user;
    for (u in client.users.array()) {
      user = client.users.array()[u];
      tools.setPoints(uPoints, user.id.toString());
      console.log('Updated ' + user.id.toString() + ' to ' + uPoints);
    }
  }, 5000);
});

tools.setPoints

module.exports.setPoints = function (amnt, id) {
  db.run('UPDATE users SET points = ? WHERE id = ?', amnt, id);
}

1 Ответ

0 голосов
/ 04 мая 2019

Обновление выполняется до или параллельно с SELECT.

Это можно исправить, если переместить ОБНОВЛЕНИЕ в обратный вызов, например:

setInterval(async function () {
    var uPoints;
    await db.each("SELECT points points, id id FROM users", function (err, row) {
      if (err) {
        console.log(err);
      }
      var u;
      for (u in client.users.array()) {
        uPoints = row.points + 10;
      }
      var user;
      for (u in client.users.array()) {
        user = client.users.array()[u];
        tools.setPoints(uPoints, user.id.toString());
        console.log('Updated ' + user.id.toString() + ' to ' + uPoints);
      }
    });
  }, 5000);
});

Я не уверен, какой клиент БД вы используете, но обычно вы не хотите смешивать ожидание с обратными вызовами. Вы либо хотите иметь:

const rows = await db.each("SELECT points points, id id FROM users");

или

db.each("SELECT points points, id id FROM users", function (err, rows) {..});

Вы должны проверить, поддерживает ли ваш клиент БД async / await, или вы можете использовать promisify.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...