如何在Typescript中返回Firestore查询的结果?

时间:2019-11-26 14:16:31

标签: typescript promise google-cloud-firestore

我在使用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,
    });
  })();
}

1 个答案:

答案 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);
})();