javascript - Firebase .update() 返回未定义,它不应该返回更新的对象吗?
问题描述
我有一个简单的更新 Firebase 函数,如下所示:
export default async function updateStuff(firestore, id, data) {
const stuff = await firestore
.collection('Stuff')
.doc(id)
.update(data)
console.log('updated stuff:', stuff) // Will always be undefined, despite working.
}
更新按预期工作,但是,一旦 Promise 完成,我所拥有的一切都是undefined
. 我本可以发誓,它曾经返回使用其更新值更新的实际条目,它不再这样做了吗?
是否可以做一些事情来验证它实际上已经在更新,而无需在更新.get()
后进行完全单独的调用?
我找不到合适的update()
API 文档,但我按照本页所述进行了操作:
要了解您的数据何时提交到 Firebase 实时数据库服务器,您可以使用 Promise。set() 和 update() 都可以返回一个 Promise,您可以使用它来了解何时将写入提交到数据库。
只是Promise<void>
没有关于更新对象的其他信息吗?我可以假设如果失败它会抛出?一旦操作完成,更新 API 必须继续重新获取值,我似乎适得其反。
解决方案
如果您查看 的参考文档DocumentReference.update()
,您会看到它返回Promise<void>
.
如果您需要更新的数据,则需要get()
单独调用。如果您更新多个文档,您可能也需要多次get()
调用。
当操作失败时,promise 确实会被拒绝。
推荐阅读
- postgresql - dbeaver 和其他连接以某种方式消耗 postgresql 服务器内存
- javascript - 谷歌浏览器可以阻止创建 csrf 令牌吗?
- sql - ORA-00937: 不是单组分组函数,已在使用 group by
- go - 编译 Go 时,我在修订版 v0.0.2 处收到以下错误 github.com/xxxxx/xxxxx/go.mod:未知修订版 v0.0.2
- swift - 文本字段部分间距上方的 SwiftUI 表单标签
- c++ - C++ - 如何以独立于平台、线程安全的方式以用户首选的日期/时间语言环境格式格式化文件的最后修改日期和时间
- git - ArgoCD GitOps,其中每个 pod 的图像标签始终是 git commit hash
- c++ - 为什么没有 vtable 的结构有额外的 4 个字节?
- node.js - Docker(在 VSCode 中)不访问转发端口(在 Linux 机器上)
- java - WebSocket 连接无异常被拒绝