我在使用Typescript类方法(角度)时遇到麻烦,我试图从Firestore查询中返回结果(总是变成一个数字),所以我可以从另一个方法中获取它并添加到Firestore。我应该说我对Typescript,Firestore查询和Promises相当陌生。我还没有找到其他有关 Typescript 中 Firestore查询中返回的问题。
我了解我的return语句是在检索数据之前执行的,但是如何返回结果,以便可以通过其他方法访问它并再次添加到Firestore中?我想检索数字时在方法startSessionPhase1
中调用该方法时遇到错误,但是方法getLastSession
返回一个Promise。
类型'Promise'不能分配给类型'number'。
我的课:
export class FirebaseService {
moduleCollection: AngularFirestoreCollection<Module> = null;
constructor(public afs: AngularFirestore) {
this.moduleCollection = afs.collection('Modules');
}
getLastSessionP1() {
var query = this.afs.collection("SessionsPhase1").ref.orderBy('session', "desc").limit(1);
return query.get()
.then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
doc.data().session;
});
})
.catch((err) => {
console.log(err.message);
});
}
startSessionPhase1(value) {
var lastSessionP1: number = this.getLastSessionP1();
console.log('lastSessionP1: ',lastSessionP1);
return this.afs.collection('SessionsPhase1').add({
variable: var, //etc
session: lastSessionP1,
});
})();
}
答案 0 :(得分:0)
喜欢此代码
getLastSessionP1(): Promise<number|null> {
var query = this.afs.collection("SessionsPhase1").ref.orderBy('session', "desc").limit(1);
return query.get()
.then(querySnapshot => querySnapshot.size > 0? querySnapshot.docs[0].data().session: null);
}
// method #1
this.getLastSessionP1().then(session => console.log(session));
// method #2
(async function () {
var lastSessionP1: number = await this.getLastSessionP1();
console.log(lastSessionP1);
})();