我很难解决我的问题。我已连接到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
有任何想法吗?
答案 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);