Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用发布为订阅创建progressbar_Javascript_Meteor_Meteor Publications - Fatal编程技术网

Javascript 使用发布为订阅创建progressbar

Javascript 使用发布为订阅创建progressbar,javascript,meteor,meteor-publications,Javascript,Meteor,Meteor Publications,我多次调用Google Analytics API并将数据加载到订阅中。现在我想创建一个progressbar来通知用户数据正在加载,并给出加载所需时间的视图 我读到最好使用发布将数据从服务器传递到客户端。这是真的吗 我在服务器上创建了以下出版物is的功能如下: 设置初始progressValue和id为1的初始发布 如果progressValue小于100,则保持循环,并告知1的发布正在更改 在这段代码下面,我运行了另一个出版物,其中progressValue是在循环的步骤中设置的 当查看客户

我多次调用Google Analytics API并将数据加载到订阅中。现在我想创建一个progressbar来通知用户数据正在加载,并给出加载所需时间的视图

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

我在服务器上创建了以下出版物is的功能如下:

  • 设置初始progressValue和id为1的初始发布
  • 如果progressValue小于100,则保持循环,并告知1的发布正在更改
  • 在这段代码下面,我运行了另一个出版物,其中progressValue是在循环的步骤中设置的
  • 当查看客户机时,仅发布最后一个progressValue。在此之前,我收到很多空数组。所以就像:

    []
    []
    []
    []
    ...
    Progress publication 
    
    我想要的是,客户端接收progressValue中的每一个更改,而不仅仅是最后一个更改。如何解决此问题?

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

    if(Meteor.isServer){
    让progressValue=0;
    Meteor.publish('progress',function()){
    const self=这个;
    设lastProgressValue=0;
    常数id=1;
    self.added('progress',id{
    进步:进步价值,
    总数:100,
    });
    while(progressValue<100){
    self.changed('progress',id{
    进步:进步价值,
    总数:100,
    });
    }
    self.ready();
    });
    ...
    
    嗯……这里有几件事

    我了解到最好使用发布将数据从服务器传递到服务器 客户,这是真的吗

    这就是Meteor使用ddp的全部意义。这意味着数据从服务器自动发送到客户端。因此,大部分操作数据的工作实际上是使用minimongo在客户端处理的

    看看这篇文章,好好讨论一下“automagic”部分

    你是如何取得进展的?

    您不希望尝试在服务器端处理递增。相反,您希望获得服务器的简单计数,可能使用反应聚合(请参见此处的答案)并将其发送到客户端。因此,服务器将计数作为发布并通知客户端“57”

    然后,作为正常的数据发布,您将57条记录发送到客户端。在客户端上,您现在基本上与在服务器上进行的求和相同,但由于客户端只收到了57条数据记录中的一部分,因此通过将接收到的客户端除以要发送的总服务器消息,您可以有效地获得一个进度计数器

    摘要

    在服务器-2发布上,1个是要发送的记录计数的反应聚合,1个是要发送的正常数据

    在CLIENT-函数上对本地minimongo集合中的记录进行计数-collection.find({}).count()-将完成此任务。这将随着客户端从服务器接收到每条记录而递增


    进度很简单,客户机上的计数除以服务器发送的要交付的计数。

    嗯……这里有几件事

    我了解到最好使用发布将数据从服务器传递到服务器 客户,这是真的吗

    这就是Meteor使用ddp的全部意义。这意味着数据从服务器自动发送到客户端。因此,大部分操作数据的工作实际上是使用minimongo在客户端处理的

    看看这篇文章,好好讨论一下“automagic”部分

    你是如何取得进展的?

    您不希望尝试在服务器端处理递增。相反,您希望获得服务器的简单计数,可能使用反应聚合(请参见此处的答案)并将其发送到客户端。因此,服务器将计数作为发布并通知客户端“57”

    然后,作为正常的数据发布,您将57条记录发送到客户端。在客户端上,您现在基本上与在服务器上进行的求和相同,但由于客户端只收到了57条数据记录中的一部分,因此通过将接收到的客户端除以要发送的总服务器消息,您可以有效地获得一个进度计数器

    摘要

    在服务器-2发布上,1个是要发送的记录计数的反应聚合,1个是要发送的正常数据

    在CLIENT-函数上对本地minimongo集合中的记录进行计数-collection.find({}).count()-将完成此任务。这将随着客户端从服务器接收到每条记录而递增


    进度很简单,只需客户端计数除以服务器发送的待发送计数即可。

    感谢您将在明天尝试。让您知道它是否有效,然后接受答案。感谢您将在明天尝试。让您知道它是否有效,然后接受答案。
    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();      
      });
    ...