代码之家  ›  专栏  ›  技术社区  ›  Vik

firebase realtime db更新特定值将进入无限循环

  •  0
  • Vik  · 技术社区  · 7 年前

    我的代码如下

    updateUserCount(){
        console.log("started user update")
        this.db.object('/analytics').valueChanges().map(
          (snapshot) => {return snapshot}
        ).subscribe(
          (res:any) => {
                            console.log("Vik:::total users in the system are:" + res.userCount)
                            this.db.object('/analytics').update({"userCount": Number(res.userCount) + 1}).then(
                              (r) => console.log("count updated")
                            ).catch(
                              err => console.log("error updating count:" + err)
                            )
          })
      }
    

    它只是试图向属性usercount添加一个。但update语句将其放入无限循环中。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Karan Bhomia    7 年前

    从上面的代码中可以理解的是,每次更新集合时,都要更新“usercount”。 虽然我不知道这里的确切解决方案,但我可以建议一种替代方法。

    1)添加云功能( https://firebase.google.com/docs/functions/ )每次向集合中添加值时触发。

    2)在typescript中,代码看起来像这样。

    import * as functions from 'firebase-functions';
    import { DocumentSnapshot } from '../node_modules/firebase-functions/lib/providers/firestore';
    
    export const valueAddFunction = functions.firestore.document('/analytics/{id}')
    .onCreate((snap: DocumentSnapshot, context: any) => {
        const original = snap.data().original
        console.log("original " + original)
        return snap.ref.set({key: "WhateverValueYouWant"}, {})
    })
    

    每当向集合中添加新文档时,都会触发此函数。您可以类似地添加监听更新的函数。 希望这有帮助。