1

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

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

А вот сама эта функция:

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

При выполнении кода выводится Promise { <pending> }. Как это обрабатывать? Как из промиса получить данные?

Grundy
  • 81,538
vanyavanya
  • 163
  • 13
  • что такое ref и что за метод on у него? – Grundy Jul 31 '20 at 19:27
  • В данном случае - скорее всего никак – Grundy Jul 31 '20 at 19:27
  • @Grundy, а вы не видите пометку Firebase? В данном случае я хочу прочитать данные из базы данных FIrebase. – vanyavanya Aug 01 '20 at 14:55
  • [tag:firebase] это конечно хорошо, но угадать, где в указанном коде объекты firebase, где пользовательские объекты, а где объекты какой-либо другой библиотеки - невозможно. – Grundy Aug 01 '20 at 15:00
  • @Grundy, потому что я сделал для них отдельный модуль. Увы, если я буду всё расписывать в одном js файле, когда их штук 7 таких - это слишком муторно и неудобно:) Да и вроде с названий переменных (тот же ref) нетрудно догадаться, что я возвращаю результат функции database.ref(). – vanyavanya Aug 01 '20 at 15:04
  • @Grundy проблема заключается в том, что метод on() сразу передаёт управление функции readData() из-за чего она возвращает результат undefined. Как раз это мне и нужно исправить. И промисы были бы отличным решением этой проблемы. – vanyavanya Aug 01 '20 at 15:07
  • Фактически, у тебя есть событие, в котором приходят данные, и тебе их нужно получить. Есть уже такой вопрос с ответами и примерами решений. – Grundy Aug 01 '20 at 15:11
  • @Grundy, этот вопрос с ответами и примерами решений мне непонятен. Я не могу подогнать решение под свой код, под свою проблему. – vanyavanya Aug 01 '20 at 15:12

1 Answers1

-1

Как-то так

exports.readData = function(ref) {
return new Promise((resolve, reject) => {
    ref.on("value", function(snapshot) {
        if(snapshot.val()) 
            resolve(snapshot.val());
        else
            reject('No data');
    });
};

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