Javascript Firebase Firestore:脱机写入操作的承诺何时解决?
我按照文档中的说明离线激活了,如:Javascript Firebase Firestore:脱机写入操作的承诺何时解决?,javascript,firebase,google-cloud-firestore,offline,Javascript,Firebase,Google Cloud Firestore,Offline,我按照文档中的说明离线激活了,如: firebase .firestore() .enablePersistence() .then(() => { console.log('offlinemode acctivated') }) 日志如我所料出现 添加这样的数据时: db .collection('foo') .add({foo: 'bar'}) .then(docRef => { console.l
firebase
.firestore()
.enablePersistence()
.then(() => {
console.log('offlinemode acctivated')
})
日志如我所料出现
添加这样的数据时:
db
.collection('foo')
.add({foo: 'bar'})
.then(docRef => {
console.log('Added Foo: ', docRef.id)
// do some stuff here with the newly created foo and it's id.
})
.catch(console.error)
脱机时既不会调用.then()
也不会调用.catch()
。即使在执行此回调时将对象添加到脱机数据库中的foo集合中,也会出现这种情况:
db
.collection('foo')
.onSnapshot(callback)
我错过什么了吗?我希望承诺会失败或解决,因此我可以做出相应的反应。Firestore中写入操作的承诺只有在服务器确认写入已完成时才会解决,即使它们可能已成功写入本地缓存。以下是我的解决方案:
onSnapshot
获取保存的文档,它返回写入本地缓存的文档(在线和离线都可用)导出函数dbWritePromise(functionPromise:Promise):Promise{
if(window.navigator.onLine){
回报函数承诺
}
否则{
返回承诺。解决()
}
}
//我一次又一次地从Github上获取了这个函数
导出函数docSnapshotPromise(参考:firebase.firestore.DocumentReference):Promise{
返回新承诺((解决、拒绝)=>{
const unsubscribe=ref.onSnapshot(doc=>{
解决(文档)
退订
},err=>{
拒绝(错误)
退订
})
})
}
在使用中(我在这里使用更新
功能,但是添加
也会以同样的方式工作)此代码正在处理名为组织
的集合中的文档:
试试看{
//更新组织文档
等待dbWritePromise(orgRef.update({
名称:“此处的新名称和改进名称”
}))
//等待此更新的文档写入本地缓存,然后我们可以获取更新的组织
const updatedOrgRef=等待docSnapshotPromise(orgRef)
const updatedOrg=updatedOrgRef.data()
console.log(updateorg.name)//输出新的和改进的名称
}
捕获(错误){handleError(错误)}
引发的错误可能是本地缓存的某个错误,也可能是服务器错误,例如Firestore规则(联机时)返回的权限错误。显然,在离线模式下服务器的任何错误都会自动失败,即使应用程序重新联机
我很想在这里看到其他人的解决方案 好的,我明白了。我该如何找到用.add()创建的对象的ID?这听起来像是另一个问题,可以单独问。你说得对。很抱歉,没有说得足够具体: