firebase - Firebase Admin SDK 事件侦听器未触发
问题描述
我正在使用 Go Firebase Admin SDK 并监听实时数据库中的变化。问题是只有当我从 Firebase 控制台手动更新数据时才会触发监听器,如果我从另一个应用程序(在本例中为 Flutter)更改数据,即使在 Firebase 控制台中可以看到更改,也不会触发监听器(所以数据肯定改变了)。
我什至尝试通过 Firebase 数据库 REST API https://firebase.google.com/docs/reference/rest/database#section-streaming执行更新,
结果相同:在控制台中可以查看数据更改,但仍然没有t 触发监听器。
这是我听 Go 变化的方式:
func listenToFirebase(ref *db.Ref, ctx context.Context) {
iter, err := ref.Listen(ctx)
if err != nil {
fmt.Printf(" Error: failed to create Listener %v\n", err)
return
}
defer iter.Stop()
for {
if iter.Done() {
break
}
event, err := iter.Next()
if err != nil {
// Handle error here based on specific usecase
// We can continue Listening
log.Printf("%v\n", err)
continue
}
fmt.Printf("Listener | Ref Path: %s | event.Path %s | event.Snapshot() = %v\n", ref.Path, event.Path, event.Snapshot())
fmt.Printf("\n")
}
}
通过从控制台更新数据触发侦听器这一事实表明侦听器工作正常。
PS:Listen-Method 尚未集成到 Go Firebase Admin SDK 中,来自https://github.com/firebase/firebase-admin-go/issues/229
解决方案
结果证明 Go 代码没有问题。问题是我从 Flutter 更新实时数据库的方式。
这是我用来执行更新的:
await ref.update({"value": value});
解决问题的方法是通过以下方式使用“set”而不是“update”:
await ref.child("value").set(value);
这样,我的 Go-Listener 方法最终被触发,一切都按预期工作。
推荐阅读
- python - 如何在 Python 3 的 exec 命令中停止执行?
- python - 如何在tensorflow中实现Region of Interest Pooling层?
- assembly - 汇编符号:sub -0x1(%bx,%di),%al
- powershell - 使用 .csv 中的文件夹名称进行复制
- angularjs - 过滤器在 AngularJs 中不起作用
- curl - 在 AIX 面临的问题上从源代码构建 Curl
- python - Python,从区间中删除子区间
- python-3.x - cx_Freeze 转换的 exe:窗口立即关闭
- angular - HashLocationStrategy 和 Location Strategy Import.Angular 2 & Typescript 后未检测到路径
- c# - “底层连接已关闭:发送时发生意外错误。”。邮递员可以使用相同的标题