Получение нескольких данных в нескольких функциях с помощью обратных вызовов Javascript - PullRequest
0 голосов
/ 14 октября 2018

Я хочу несколько функций, которые имеют обратные вызовы, и эти функции будут возвращать данные БД.Пример:

getStates: function (callback) {
        try {
            dbExecution.executeQuery("SELECT * FROM Table",
                function (err) {
                    console.log(err);
                }, function (rowCount, more, rows) {
                    if (rowCount > 0) {
                        callback(rows);
                    } else {
                        callback(null);
                    }
                });
        } catch (ex) {
            console.log(ex);
            callback(null);
        }
    }

Но эта функция только одна, у меня есть пять функций, которые делают то же самое, но получают разные данные.«Основная» функция:

router.get('/content', sessionChecker, function (req, res) {
    Module.getStates(function (data) {
        res.render('info-user', { states: data });
    });
    Module.getReligion(function (data) {
        res.render('info-user', { religions: data });
    });
});

Как я могу вызвать 5 функций с помощью асинхронного Javascript (Штаты, Город, Религия и т. Д.) Без вложенных функций?

1 Ответ

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

Измените каждый get* метод, чтобы он возвращал Promise (вместо использования обратных вызовов), и тогда вы можете использовать Promise.all для массива этих Promises.Promise.all разрешится, когда все Promises в массиве разрешатся - тогда вы можете res.render:

getStates: () => new Promise((resolve, reject) => {
  dbExecution.executeQuery("SELECT * FROM Table",
    reject,
    function(rowCount, more, rows) {
      // if rowCount is 0, do you want to reject?
      // if (rowCount === 0) reject();
      resolve(rows);
    }
  )
})

Затем, как только все функции будут выглядеть, как указано выше:

router.get('/content', sessionChecker, function (req, res) {
  Promise.all([
    Module.getStates(),
    Module.getReligion(),
  ]).then(([states, religions]) => {
    res.render('info-user', { states, religions });
  })
  .catch((err) => {
    // handle errors
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...