0

Функция сначала возвращает undefined, а после - корректное значение. Сама функция представляет собой запрос на чтение данных из базы данных firebase. Вот сама функция:

exports.readData = function(ref) {
    let data;
    ref.on("value", function(snapshot) {
        if(snapshot.val()) data = snapshot.val();
    });
    return data;
};

Фрагмент кода, в котором вызывается функция:

module.exports.run = async (bot, message, args) => {
  message.channel.send('pong!');
  let ref = chillbotDBWork.newRef(`/${message.author.id}`);
  let data = chillbotDBWork.readData(ref);
  console.log(data);
};

Может нужно использовать callback'и, но я не знаю как их использовать их правильно. Буду рад, если кто-то подскажет в чём может быть проблема и как её решить.

vanyavanya
  • 163
  • 13
  • Запрос к бд отрабатывает какое-то время и при первом вызове ответа ещё нет. – Quazimorda Jul 30 '20 at 10:26
  • @Quazimorda, да, т.к. запрос асинхронный, но как это решить? Что нужно сделать в данном случае? – vanyavanya Jul 30 '20 at 15:00
  • в этом случае нужно использовать промисы или обратный вызов функций - callback. https://learn.javascript.ru/promise или https://habr.com/ru/company/ruvds/blog/330880/ – Quazimorda Aug 07 '20 at 09:45
  • @Quazimorda можете показать как будет выглядеть фрагмент кода? – vanyavanya Aug 08 '20 at 14:13
  • Происходит обратный вызов. У функции, которая обращается к базе, нужно добавить второй аргумент callBack, и вызывать внешнюю функцию после того, как отработает запрос в базе. В вашем случае есть небольшая тонкость. Внешняя функция имеет свои аргументы при запуске. – Quazimorda Aug 10 '20 at 07:25

0 Answers0