2017-08-12 19 views
1

我打電話多次使用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();  
    }); 
... 

回答

0

嗯......所以,一對夫婦的東西在這裏。

我讀過最好用發佈來將數據從服務器傳遞到 客戶端。這是真的?

這是整點流星,採用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