使用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
。
我认为这与以下事实有关:文档已被删除,因此用户不再有权访问它(我有安全规则,仅允许用户访问具有其userID的文档),因此Missing or insufficient permissions part
。无论如何,UI不应再监听更新,这使我想知道为什么会收到此错误消息?我尝试使用相同的文档引用(即const unsubscribe = modelRef.onSnapshot(() => {});
)传递一个空的回调,但随后我只收到两次错误消息。无论如何,documentation implies我应该使用其他文档引用。我很确定自己没有正确取消订阅,但是不确定要更改什么。任何帮助将不胜感激。
答案 0 :(得分:1)
您所看到的错误是故意的。仅在明确允许的情况下,您才能查看数据。由于没有数据可用于执行规则,因此未明确给出权限未,因此会出现错误。
如果您不想在控制台上看到该错误或冒泡,可以随时传递一个onError
函数来处理该特定错误。