Javascript 如何确保某个集合中的数据比其他数据先到达?
我有两个收藏,Javascript 如何确保某个集合中的数据比其他数据先到达?,javascript,meteor,Javascript,Meteor,我有两个收藏,tableA和tableB。表格B中的文档有一个字段,该字段对应于表格a中一个文档中的\u id(基本上是外键)。例如: tableB.find({tableA_id: xxx}) // returns documents whose tableA_id is xxx 现在,我有一个observeChanges收听tableA集合。如果tableA有新的或更新的文档,我需要从tableB获取带有新\u id的文档: tableA.find({}).observeChanges({
tableA
和tableB
。表格B
中的文档有一个字段,该字段对应于表格a
中一个文档中的\u id
(基本上是外键)。例如:
tableB.find({tableA_id: xxx}) // returns documents whose tableA_id is xxx
现在,我有一个observeChanges
收听tableA
集合。如果tableA
有新的或更新的文档,我需要从tableB
获取带有新\u id的文档:
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
是否有任何方法可以确保来自表A
的数据首先到达?是否可以澄清您的模式设计以及为什么要使用两个表?可能有一种更简单的方法来构造模式,或者使用一个集合而不是两个集合
但是让我们假设两个独立的集合是必需的:您是否尝试过创建回调函数
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 = 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)。如果愿意,您可以将变量从父函数传递到回调函数。我不知道这是否有帮助,但您是否尝试过使用而不是编写自己的联接?