【问题标题】:Correctly updating the same object on create trigger in firebase realtime DB trigger在firebase实时数据库触发器中正确更新创建触发器上的相同对象
【发布时间】:2019-01-07 05:42:08
【问题描述】:

我在创建节点上有一个 firebase 实时数据库触发器。我的需要是根据同一对象的创建触发器中的某些条件更新属性。我目前的做法如下:

exports.on_order_received_validate_doodle_cash_order = functions.database.ref("/orders/{id}")
.onCreate((change, context) => {
  console.log("start of on_order_received_deduct_doodle_cash")   
  const orderId = context.params.id
  const order = change.val();

 var db = admin.database();
 const orderRef = db.ref('orders/')
 return orderRef.child(orderId).update({"_verifiedOrder": true}) 
})

如您所见,我从上下文中获取订单 ID,然后再次查询对象并更新它。我的问题是我需要做这个马戏团还是可以直接更新它而不再次查询?

【问题讨论】:

  • 我不明白。什么是“这个马戏团”? “再次查询”在哪里?仅供参考,val() 不是Change 对象上的方法,但您似乎并没有使用order
  • 关于您的代码逻辑的一个小注释:制作一个仅将标志设置为 true 的触发器并不会增加太多洞察力,因为您还将在客户端知道创建数据时是否存在错误或不。因此,您的 _verifiedOrder 标志仅验证数据已创建,客户端已经知道,因为没有引发异常。
  • 丹尼斯我把废话删掉以保持问题的相关性。在实际将其设置为 true 之前,我正在做一些处理。
  • 好的,那么我下面的回答应该会有所帮助。只需在 return 语句之前再次挤入你的“废话”;-),一切都会好起来的。
  • 所以基本上我的代码很好,只是使用你的提示不记录输入方法,更改为快照等正确吗?

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


【解决方案1】:

通常看起来不错。只是一些小的反馈,让您对走上正确的轨道更有信心。

  1. 调用参数snapshot 而不是change,因为参数名称change 仅对onUpdate 事件触发器有意义。
  2. 您无需记录您正在输入该函数。因为 Firebase 也会自动记录进入和离开函数。
  3. 您可以删除未使用的order 变量。
  4. 您实际上并没有再次“查询”该对象。引用数据库中的节点本身不会进行任何网络调用。直到您订阅接收数据。所以orderRef.child(orderId) 不是查询,它只是一个数据库引用。
  5. 您可以使用快照自己的引用属性来稍微缩短您的代码...有效地丢弃几乎所有代码:-)

所以你的代码看起来像这样。它正在做完全相同的事情,只是更短。从一开始也是正确的。

exports.on_order_received_validate_doodle_cash_order = functions
    .database
    .ref("/orders/{id}")
    .onCreate((snapshot) => {
        return snapshot.ref.child("_verifiedOrder").set(true);
    });

但正如我在上面的评论中提到的,您实际上只是设置了一个标志来确认数据已保存(或者更确切地说:确认该功能已被触发)。您可能需要在其中添加一些逻辑来检查是否可以下订单,然后根据该情况将已验证标志设置为 true 或 false。因为按照实现的逻辑,所有的订单都会把_verifiedOrder的值设置为true,这样会浪费你数据库的存储空间。

【讨论】:

  • 实际上,我并没有将其设置为 true,所以请您帮我修改上面的代码,以显示您是否会稍后更新属性,而不是仅在触发器调用本身中进行更新
猜你喜欢
  • 2019-12-19
  • 2020-09-21
  • 2018-08-09
  • 2018-08-06
  • 2023-03-02
  • 2020-06-21
  • 2021-06-26
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多