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