javascript - Meteor.subscribe 和 MyCollection.find* 操作如何交互?

标签 javascript meteor reactive-programming

我一直在关注大量的 meteor 示例并通过发现 meteor 进行工作,现在我留下了很多问题。我知道 subscribefetch 是让“ react 性”正常工作的方法,但我仍然不确定查找操作和订阅/获取之间的关系。我将尝试提出一些问题,以探究一些整体/概念性的答案。

问题集 1:

在以下示例中,我们将获取 1 个对象并订阅其更改:

Meteor.subscribe('mycollection', someID);
Mycollection.findOne(someID);

这里的操作顺序重要吗?
此订阅何时“过期”?

问题集 2:

在某些情况下,我们想要外键查找并使用fetch,如下所示:

MyCollection2.find({myCollection1Id: doc1Id}).fetch();

使用fetch时我们还需要MyCollection2.subscribe吗?
订阅如何与“外键”一起使用?
fetch ~= 是订阅吗?

问题集 3:

Tracker.autorun 的正确用法是什么?
为什么/什么时候应该使用它而不是订阅或获取?

最佳答案

订阅并查找/获取时会发生什么

  1. 客户端调用subscribe,通知服务器客户端想要查看一组特定的文档。

  2. 服务器接受或拒绝订阅请求并发布匹配的文档集。

  3. 稍后(网络延迟后)文档到达客户端。它们存储在浏览器中名为 minimongo 的数据库中。

  4. 对存储上述文档的集合进行后续的 fetch/find 将查询 minimongo(而不是服务器)。

    <
  5. 如果订阅的文档集发生变化,服务器将向客户端发布新的副本。

推荐阅读:understanding meteor publications and subscriptions .

问题 1

顺序很重要。您无法查看尚未订阅的文档(假设自动发布已关闭)。然而,正如我在 common mistakes 中指出的那样,订阅不会被阻止。因此,订阅后立即获取应该返回 undefined

订阅不会自行停止。详情如下:

  1. 全局订阅(在路由器或模板之外进行的订阅)将永远不会停止,直到您调用其 stop方法。

  2. 当路线发生变化时,路线订阅(铁路由器)将停止(有一些注意事项)。

  3. A template subscription当模板被销毁时将会停止。

问题2

这应该主要由我答案的第一部分来解释。您需要两组文档才能在客户端上加入它们。您可以从服务器一次发布这两个集合,也可以单独发布 - 这是一个复杂的主题,取决于您的用例。

问题3

这两者有些正交。 autorun 是一种创建响应式(Reactive)计算的方法(只要响应式(Reactive)变量发生变化就会运行的函数) - 请参阅 reactivity 部分。来自文档。 find/fetchsubscribe 可能在 autorun发生,具体取决于您的用例。一旦您更多地了解 Meteor 的工作原理,这一点可能会变得更加清晰。

关于javascript - Meteor.subscribe 和 MyCollection.find* 操作如何交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446599/

相关文章:

JavaScript 子菜单不持久

javascript - 如何在浏览器中使用 Google 编译器而不请求服务?

node.js - 为什么在我的 .find() 输出中添加了 "Document"这个词?

javascript - 我如何模拟多个同步的慢 meteor 发布?

javascript - 了解 rxjs 中的 SwitchMap

javascript - 如何在 javascript、javaservlets、mysql 和 back 中使用 utf8?

javascript - 我的 javascript 暴力递归数独解算器是否内存不足?

javascript - 在 meteor 中设置简单事件

java - Mono.subscriberContext() 返回旧上下文

swift - RxSwift和Moya同步请求