每当我更新当前用户时,所有集合都会被刷新(实际上不是)

Whenever I update current user, all collections are flushed (actually not)

本文关键字:刷新 实际上 更新 用户 集合      更新时间:2023-09-26

我正在开发一个有角流星的网站,我遇到了一个奇怪的问题。在我有聊天块的每个页面上,消息都存储在集合chatMessages中并正确显示。问题是,每次我编辑当前用户(手动mongo文档编辑或在流星的方法内更新)时,我的应用程序都会删除所有订阅。结果,消息从聊天中消失了。但不仅聊天信息消失了。我用这段代码来理解问题的原因,但我几乎无法理解。以下是浏览器控制台输出中最有趣的部分:

// On page load
send Object {
    msg: "sub",
    id: "EPgQwMiDggM7wafCN",
    name: "chatMessages",
    params: Array[0]
}
receive Object {
    msg: "added",
    collection: "chatMessages",
    id: "G6tv76ZSJYXmnsrAY",
    fields: Object
}
// Calling 'createArenaRoom' method
send Object {
    msg: "method",
    method: "createArenaRoom",
    params: Array[1],
    id: "8",
    randomSeed: "516b5128615f1c7849f2"
}
// User updated
receive Object {
    msg: "changed",
    collection: "users",
    id: "sQnaLPj2FvH692rQM",
    fields: Object
}
// ??? WHY ????
send Object {
    msg: "unsub",
    id: "EPgQwMiDggM7wafCN"
}
receive Object {
    msg: "removed",
    collection: "chatMessages",
    id: "G6tv76ZSJYXmnsrAY"
}
receive Object {
    msg: "nosub",
    id: "EPgQwMiDggM7wafCN"
}

顺便说一下,数据并没有从mongo中删除。如果我刷新页面,它会再次显示聊天信息和其他内容。

如有任何帮助,我们将不胜感激。

最后我找到了问题的原因。在我的main.html中,我有这样的东西:

<div ng-if="$root.loggingIn" class="loading-screen"></div>
<myapp ng-if="!$root.loggingIn"></myapp>

这样做是为了防止在当前用户的数据可用之前执行组件的代码。我从myapp指令中删除了ng-if="!$root.loggingIn",问题就消失了。我只能猜测为什么它会引起如此奇怪的行为。现在我在组件中使用this.autorun()来等待用户数据。