Асинхронная функция не возвращает значение после получения данных Firebase

1

Я создал проект, чтобы вернуть значение app.js без необходимости обработки обещания. Этот код возвращает undefined при запуске. Какие-нибудь советы?

export.js '

const admin = require('firebase-admin')
const db = admin.firestore();
const ref = db.collection('Things')

async function getNameV(ting) {
  return await ref.get().then(doc => {
   doc.forEach(documentSnapshot => {
    var data = documentSnapshot.data()
    if (ting == data.name || ting == data.id) {
     return data.name
    }
   })
 })
};

module.exports.getName = function(ting) {
  getNameV(ting).then(value =>{
    console.log(value)
    return value;
  })
};

app.js

 const exp = require('./export.js')
 var name = await exp.getName('foo')
 console.log(name)
  • 0
    Бессмысленно, почему вы используете .then когда у вас есть async/await ?
Теги:
firebase
firebase-realtime-database

2 ответа

2

Вы должны вернуть обещание, созданное в вашей функции module.exports.getName, например:

module.exports.getName = function(ting) {
    return getNameV(ting).then(value =>{
        console.log(value)
        return value;
    });
};

Затем, на стороне app.js, вы должны убедиться, что вы вызываете экспортированную функцию из функции async (иначе вы не сможете ее вызвать, используя await):

const exp = require('./export.js')
async function start() {
    var name = await exp.getName('foo')
    console.log(name);
}
start();
0

Хьюго прав, но у вас есть еще одна ошибка в дополнение к этому. getNameV даже не возвращает обещание, которое дает ценность, которую вы ищете. return data.name на самом деле просто возвращается из анонимной функции, переданной в forEach(). Это значение не превращает это в обещание, которое вы вернетесь из getNameV. Прямо сейчас, это буквально просто возвращает обещание, которое содержит неопределенные прямо сейчас.

Кроме того, return await [promise] здесь избыточно. Вы можете просто return [promise], и даже не обе метки getNameV с async.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню