0

我有两个系列,tableAtableB. 文档中tableB的一个字段对应_id于一个文档中的字段tableA(基本上是外键)。例如:

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

现在,我有一个observeChanges收听的tableA集合。如果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很快就到了。

我目前的解决方案基本上是做一个Meteor.callinside observeChanges,它手动从服务器获取新数据,虽然它不优雅。我还想Meteor.setTimeout在从tableB.

有什么方法可以确保来自的数据tableA首先到达?

4

1 回答 1

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。如果您愿意,可以将变量从父函数传递到回调函数。

于 2013-05-27T02:31:13.103 回答