Почему Promise { }?

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

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> }. Как это обрабатывать? Как из промиса получить данные?


Ответы (1 шт):

Автор решения: HTMLProgrammer

Как-то так

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);
};
→ Ссылка