无法从Firebase采取的类方法获取数据

时间:2019-02-14 14:52:38

标签: javascript database firebase google-cloud-firestore database-connection

我很难解决我的问题。我已连接到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 :(得分:0)

由于您编写的exist()函数是异步的,因此不会得到true / false值,也不会返回内部函数。如果要从内部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);