【发布时间】:2019-01-29 05:25:09
【问题描述】:
我在使用 Firestore 的 onSnapshot 方法取消订阅更新时遇到了一些问题。
我与外部工作人员一起对文件进行了一些处理。它在完成后更新 Firestore 数据库。我使用以下代码在前端收听这些更新:
import store from "../store";
import db from "./firebase"
import { updateModelConversionProgress } from "../actions/updateModelConversionProgress";
const listenForConversions = (resource, id) => {
const modelRef = db.collection(resource).doc(id);
const unsubscribe = db.collection(resource).doc(id).onSnapshot(() => {});
modelRef.onSnapshot(doc => {
const model = doc.data();
if (model) {
store.dispatch(
updateModelConversionProgress(
id,
model.file.uniqueFilename,
model.conversionStatus
)
);
}
if (model && model.conversionStatus === "completed") {
// Unsubscribe from updates
unsubscribe();
}
});
};
export default listenForConversions;
这一切都很好,我的 UI 会在数据库更新时更新。但是,如果我删除此文件,我会在控制台中收到以下错误:Uncaught Error in onSnapshot: Error: Missing or insufficient permissions。
我认为这与文档已被删除因此用户无法再访问它的事实有关(我的安全规则只允许用户访问具有其用户 ID 的文档)因此Missing or insufficient permissions part。无论如何,UI 不应再监听更新,这让我想知道为什么我会收到此错误消息?我尝试使用相同的文档引用(即const unsubscribe = modelRef.onSnapshot(() => {});)传递一个空回调,但我只收到两次错误消息。 documentation implies 无论如何我都应该使用不同的文档参考。我很确定我没有正确退订,但我不确定要更改什么。任何帮助将不胜感激。
【问题讨论】:
标签: javascript firebase google-cloud-firestore