我有两个集合,tableA
和tableB
。 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.call
内observeChanges
,它会手动从服务器获取新数据,尽管它不够优雅。我还想在从Meteor.setTimeout
获取文档之前调用tableB
。
有什么方法可以确保tableA
的数据先到达?
答案 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.如果愿意,您可以将变量从父函数传递到回调函数。