【发布时间】:2018-09-13 03:35:12
【问题描述】:
这个问题是Firestore offline cache 的后续问题。我已经阅读了离线缓存documentation,但有一点很困惑。
一位评论者在上一个问题中回答了(〜一年前):
与数据库交互的 Android 代码将是相同的 无论您是否已连接,因为 SDK 的工作原理都是一样的。”
在API documentation for DocumentReference's set method,我刚刚注意到它说:
退货
non-null Promise containing void一次解决的承诺 数据已成功写入后端。 (请注意,它 离线时无法解决)。
强调我的。文档中的这一点不会表明代码的行为不同,还是我遗漏了什么?如果我在允许某些用户交互之前等待 .set() 解决,这听起来像是我需要为离线案例调整代码,而不是通常。
CollectionReference's add method 让我更加担心。它没有完全相同的注释,但说(强调我的):
一个 Promise,它通过 DocumentReference 解析,指向新创建的文档在写入后端后。
这有点模糊,因为不确定在这种情况下“后端”是否是“缓存”和“服务器”的超集,或者它是否仅表示服务器。如果这个不能解决,那就意味着下面的行不通,对吗?
return new Promise((resolve, reject) => {
let ref = firestore.collection(path)
ref.add(data)
.then(doc => {
resolve({ id: doc.id, data: data })
})
...
})
意思是,.add() 不会解析,.then() 不会运行,我也无法访问刚刚添加的文档的id。我希望我只是误解了一些东西,并且我的代码可以继续在线和离线运行。
【问题讨论】:
-
您将此问题标记为“android”,但由于原生 Android 开发不涉及 Promise,因此我将其更改为“javascript”。原生 android 涉及到 Task 对象,它们相似,但不一样。
-
@DougStevenson - 好点。感谢您解决此问题。
标签: javascript google-cloud-firestore offline