Не удается получить данные из метода класса, взятого из Firebase - PullRequest
0 голосов
/ 14 февраля 2019

Мне трудно решить мою проблему.Я подключен к Firebase и пытаюсь установить соединение и проверить, находится ли имя в базе данных.

 class Db {

    connect (path) {
        const db = firebase.firestore();
        const docRef = db.doc(path);
        return docRef;
    }

    exist (name, path) {

        this.connect(path).get()
        .then(querySnapshot => {
            console.log(querySnapshot.data().Users);
            const users = querySnapshot.data().Users;
            // return users;
            if (users.indexOf(name) > -1) {
                console.log('yes');
                return true
            } else {
                console.log('no');
                return false
            }
        })
        .catch(e => {
            console.log(e);
        })
    }
}


let databaseurl = '2048/database';
let database = new Db();

console.log(database.exist('kytek', databaseurl));  //undefined

из журнала консоли Я получаю undefined, но журнал консоли возвращает массив, я не являюськонечно, зачем ... расстаться с возвратом раньше, если:

console.log(querySnapshot.data().Users);
const users = querySnapshot.data().Users;
return users;

и consol.log возвращает массив, но return возвращает undefined какие-либо идеи?

1 Ответ

0 голосов
/ 15 февраля 2019

Вы не получаете свои значения true / false, потому что написанная вами функция exist() является асинхронной, и вы не возвращаете внутреннюю функцию.Если вы хотите вернуть данные из внутренней this.connect().get() функции, вам нужно вернуть эту внешнюю функцию ... что я имею в виду:

exist (name, path) {

    return this.connect(path).get()
        .then(querySnapshot => {
        // etc... rest of function here

Если это не работает для вас, вы также можетенеобходимо отметить функцию как async и использовать await для ожидания получения результата:

async exist (name, path) {

    return this.connect(path).get()
        .then(querySnapshot => {
        // etc... rest of function here


let databaseurl = '2048/database';
let database = new Db();

let result = await database.exist('kytek', databaseurl);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...