2014-02-12 81 views
2

當使用在客戶端下面的代碼,爲什麼變量initif(init)評價爲true即使談到init = true前,沒有新的文件添加到收藏Orders?這導致query.observe返回查詢返回的所有文檔,而不僅僅是新添加的文檔。Meteor.startup在客戶端上

在服務器端沒有發現此行爲,只在添加新文檔時執行console.log

Meteor.startup(function() { 

    var init = false 
    var query = Orders.find() 
    var handle = query.observe({ 
     added: function (doc) { 
      if(init) 
       console.log(doc) 
     } 
    }); 

    init = true 

}) 

回答

3

這是因爲一切都同步服務器上,而一切都是異步客戶端上。該query.observe操作完成後

init=true將被設置,但在客戶機上之前,這是init將幾乎立即的觀察手柄運行設置爲true它可以進行設置。

您將不得不使用不同的行爲來使其以客戶期望的方式工作。

也許使用的東西得到時間戳後認購完成,然後只有噹噹前時間戳是繼續走高:

Meteor.subscribe("yourdocs", function() { 
    Session.set("yourdocs_finishtime", new Date().getTime()); 
}); 

然後讓您感覺手柄:

added: function (doc) { 
    var subtime = Session.get("yourdocs_finishtime"); 
    if(subtime && (subtime < new Date().getTime())) 
     console.log(doc); 
}