Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确保某个集合中的数据比其他数据先到达?_Javascript_Meteor - Fatal编程技术网

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

我不知道这是否有帮助,但您是否尝试过使用而不是编写自己的联接?