使用发布为订阅创建进度条

时间:2017-08-12 17:24:29

标签: javascript meteor meteor-publications

我多次调用Google AnalyticsAPI并将该数据加载到订阅中。现在我想创建一个进度条来通知用户正在加载数据,并提供一个关于它将花费多长时间的视图。

我读到最好使用发布将数据从服务器传递到客户端。这是真的吗?

我在服务器上创建了以下发布。 以下是:

  1. 设置初始progressValue和id为1的初始发布
  2. 如果progressValue小于100,则
  3. 保持循环,并告知1的发布正在发生变化。
  4. 在此代码下面,我有另一个出版物,其中循环中逐步设置progressValue。
  5. 查看客户端时,只会发布最后一个progressValue。在此之前,我收到了很多空数组。所以它就像:

    personal

    我想要的是客户端接收progressValue中的每个更改而不是最后一个更改。我该如何解决这个问题?

    如果有关于如何创建订阅进度条的更好建议,也会接受这些答案。

    []
    []
    []
    []
    ...
    Progress publication 
    

1 个答案:

答案 0 :(得分:0)

嗯......所以,这里有几件事。

  

我读到最好使用发布从服务器传递数据   客户。这是真的吗?

这是Meteor的重点,使用ddp。表示数据从服务器自动发送到客户端。因此,操作数据的大部分工作实际上是使用minimongo处理客户端。

看看这篇文章,对“自动化”部分进行了很好的讨论......

http://richsilv.github.io/meteor/meteor-low-level-publications/

您如何取得进展?

您不想尝试处理服务器端的递增。相反,您希望获得服务器的简单计数,可能使用反应性聚合(请参阅我的答案How to reactively aggregate mongodb in meteor)并将其发送给客户端。因此,服务器计算出一个出版物并告诉客户'57'即将到来。

然后,作为普通数据发布,您将57条记录发送给客户端。在客户端,您现在基本上和服务器上的数量相同,但由于客户端只接收了57条数据记录中的一部分,您可以通过划分服务器接收的客户端消息来有效地获得进度计数器发送。

<强>摘要

在SERVER - 2个出版物上,1个被动聚合用于发送记录的计数,1个作为正常数据发送

在CLIENT上 - 用于计算本地minimongo集合中记录的函数 - collection.find({})。count() - 将完成这一操作。当客户端从服务器接收到每条记录时,这将增加。

进度就像客户端数量除以服务器发送计数一样简单。