如何确保来自某个Collection的数据在其他数据之前到达?

时间:2013-05-27 01:12:05

标签: javascript meteor

我有两个集合,tableAtableBtableB中的文档在_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.callobserveChanges,它会手动从服务器获取新数据,尽管它不够优雅。我还想在从Meteor.setTimeout获取文档之前调用tableB

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

1 个答案:

答案 0 :(得分:1)

是否可以澄清您的架构设计以及您使用两个表的原因?可能有一种更简单的方法来构建模式,或者有一个集合而不是两个集合。

但我们假设需要两个单独的集合:您是否尝试过创建回调函数?

e.g。沿着这些方向创建回调函数:

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