【问题标题】:In Firebase functions, how to clean up database refs after use?在 Firebase 函数中,如何在使用后清理数据库引用?
【发布时间】:2017-10-14 13:42:18
【问题描述】:

我的函数运行完成后如何删除ref?有必要吗?我希望我的函数尽快运行,并且不希望“东西”堆积如山。

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.myFunction = functions.database.ref('/path/{uid}').onWrite(event => {
   const ref = event.data.adminRef.root.child('something').child(event.params.uid);

   return ref.transaction(current => {
      if (event.data.exists() && !event.data.previous.exists()) {
         return _.toInteger(current) + _.toInteger(_.get(data, 'value', 0));
      }
   }).then(() => {
      return null; // Avoid "Error serializing return value: TypeError: Converting circular structure to JSON"
    });
 });

【问题讨论】:

  • 我不确定我是否理解。函数完成后是否要从数据库中删除ref处的数据?
  • 不,我的意思是避免打开“连接”:) 但我想这不是问题。你指的可能是某种队列?类似return ref.set(data).then(() => { return event.data.ref.remove(); });

标签: javascript firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

DatabaseReference 是您可以“删除”的任何东西。它只是指向数据库中某个位置的指针。该文档有一个页面: https://firebase.google.com/docs/reference/admin/node/admin.database.Reference

您唯一可以删除/分离的是您使用ref.on(...) 设置的回调,使用ref.off(...),但您的代码中没有回调,我认为ref.once() 应该可以完成大部分时间的工作在函数中。

要明确:ref.transactions() 不必分离,它们只运行一次,即没有回调。 ref.set()ref.once() 相同。

【讨论】:

  • @RemiSture 很高兴,我的回答解决了您的问题!您也可以接受我的回答,以便其他人知道它已被回答并且不会显示为“未回答”:)
  • 我尝试了ref.on()ref.off(),但在我更改值时它仍然会监听。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 2011-08-19
  • 2019-06-06
  • 2022-08-04
  • 2017-04-19
  • 1970-01-01
  • 2014-04-07
  • 2011-08-06
相关资源
最近更新 更多