删除用户及其所有文档Firestore

时间:2018-06-04 09:31:53

标签: angular typescript firebase google-cloud-firestore

当用户想要删除他的帐户时,我想确保他在Firebase中创建的“文档”也会被删除。

我在网上找到了一些帮助我的帮助:

deleteAccount() {

        const qry: firebase.firestore.QuerySnapshot = await this.afs.collection('houses', ref => ref.where('email', '==', this.afAuth.auth.currentUser.email)).ref.get();
        const batch = this.afs.firestore.batch();

        qry.forEach( doc => {
          batch.delete(doc.ref);
        });
      batch.commit();         
}

但我在'await'关键字上收到错误消息:'await' expression is only allowed within an async function.

任何人都可以告诉我如何解决这个问题,或者是否有更好的方法来解决这个问题?

我对此很新,所以我不确定如何继续,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

解决方案是创建async函数。

你提到你是编程新手,一开始很难理解promises和async / await。我建议你看this video进行介绍。

你可以通过两种方式解决它。

  1. Async,jut添加异步字:async deleteAccount() {
  2. 创建一个承诺链(尝试练习):
  3. deleteAccount() {
      firebase.firestore.QuerySnapshot = await this.afs.collection('houses', ref => ref.where('email', '==', this.afAuth.auth.currentUser.email)).ref.get()
      .then(qry => {
        const batch = this.afs.firestore.batch();
        qry.forEach(doc => batch.delete(doc.ref));
        return batch.commit();
      })
      .then(() => console.log('done'))
      .catch(err => console.log(`failed with ${err.message}`)
    

    顺便说一下,如果你使用async / await,请记得好好理解try / catch。快乐的编码!