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

问题描述:

我打电话多次使用Google Analytics API并将该数据加载到订阅中。现在我想创建一个进度条来通知用户数据正在被加载,并给出它需要多长时间的观点。使用发布来创建订阅进度条

我读了它,最好使用出版物从服务器数据传递到客户端。这是真的?

我创建了以下在服务器上发布。 是什么做的是以下几点:

  1. 设置初始progressValue和ID为1
  2. 初始发行不断循环,如果progressValue小于100,告诉1出版物正在发生变化。
  3. 在这段代码的下面,我有一个其他出版物,其中的progressValue在循环的步骤中被设置。

当寻找在客户端只有最后progressValue被公布。在此之前,我收到了很多空阵列。因此,它是这样的:

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

我要的是客户端接收progressValue的每一个变化,而不是仅在最后一个。我该如何解决这个问题?

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

if (Meteor.isServer) { 
    let progressValue = 0; 

    Meteor.publish('progress', function() { 
    const self = this; 
    let lastProgressValue = 0; 

    const id = 1; 

    self.added('progress', id, { 
     progress: progressValue, 
     total: 100, 
    }); 


    while (progressValue < 100) { 
     self.changed('progress', id, { 
     progress: progressValue, 
     total: 100, 
     }); 
    } 
self.ready();  
    }); 
... 

嗯......所以,一对夫妇的东西在这里。

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

这是整点流星,采用DDP。意味着数据从服务器自动发送到客户端。因此,操纵数据的大部分工作实际上是使用minimongo处理客户端。

看一看这篇文章的“AUTOMAGIC”部分的一个很好的讨论......

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

你怎么办进步?

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

然后为您的正常数据发布,您发送的57条记录到客户端。在客户端上,你现在基本上和你在服务器上做的是一样的总和,但是由于客户端只接收到57个数据记录中的一部分,你可以通过将客户端收到的服务器消息总数将被寄出。

摘要

在服务器 - 2种出版物,为的记录的计数1个活性骨料发送和1作为被发送

客户端上的正常数据 - 函数来计算所述记录在本地minimongo集合 - collection.find({})。count() - 将做到这一点。这将随着客户端从服务器接收到的每条记录而增加。

进度很简单,客户数除以服务器发送次数即可发送。

+0

谢谢明天再试。让你知道它是否有效,然后接受答案。 – Christoph

+0

它的工作原理!感谢您的建议。 – Christoph