2013-05-27 22 views
0

我有兩個系列,tableAtableBtableB中的文檔在tableA(基本上是一個外鍵)的一個文檔中有一個對應於_id的字段。例如:如何確保來自某個Collection的數據在其他數據之前到達?

tableB.find({tableA_id: xxx}) // returns documents whose tableA_id is xxx 

現在,我有一個observeChangestableA集合。如果tableA有新的或更新的文件,我需要從tableB獲取文件與新的_ids

tableA.find({}).observeChanges({ 
    changed: function(new, old) { 
     tableB.find({tableA_id: new._id}); 
    } 
    ... 
}); 

但是,有時候,從tableA更新首先到達客戶端,即使我在tableB插入文件第一。

// This is how I insert data in the server. 
tableB.insert(...); 
tableA.insert(...); 

tableB的更新不久後到達。

我現在的解決方案基本上是在observeChanges裏面做一個Meteor.call,它手動從服務器獲取新數據,儘管它不雅觀。在從tableB獲取文檔之前,我還想過撥打Meteor.setTimeout

有什麼方法可以確保tableA的數據首先到達?

+0

我不知道這是否有幫助,但您是否嘗試過使用[publish-with-relations](https://github.com/erundook/meteor-publish-with-relations)而不是編寫自己的連接? –

回答

1

是否可以闡明您的模式設計以及您爲什麼使用兩個表格?可能有一種更簡單的方法來構建模式,或者有一個集合而不是兩個集合。

但讓我們假設兩個單獨的集合是必要的:你有沒有嘗試創建一個回調函數?

例如沿着這些線路創建回調函數:

myFunctionName = function(arg1, arg2,...,callback){ 
    //run your first query here... 
    //then run your callback function 
    if (callback && typeof(callback) === "function") { 
    callback(); 
    } 
}); 

那麼你會調用你的函數沿着這些線路:

myFunctionName(arg1, arg2, ..., function(){ 
    // run your second query here... 
    // note: this is your "callback" function 
} 

代碼將首先運行myFunctionName - 即查詢1 - 然後將運行回調函數 - 即查詢2.如果您願意,您可以將父函數的變量傳遞給回調函數。

相關問題