Meteor:异步更新订阅

sle*_*ica 8 javascript asynchronous meteor

我有一个订阅,在调用后ready(),执行一些从其他集合中提取数据的更新:

Meteor.publish('foo', function() {
  this.ready()

  // Several times:
  var extraData = OtherCollection.findOne(...)
  this.changed(..., extraData)
})
Run Code Online (Sandbox Code Playgroud)

如何异步运行这些更新?每次更新都访问数据库,进行一些计算,并调用changed订阅.

所有更新完成后我还需要运行代码(重新同步).

Kyl*_*yll 5

只需保存发布处理程序并在以后使用!

var publishHandler;

Meteor.publish('foo', function() {
  publishHandler = this;

  //Do stuff...
});

//Later, retrieve it and do stuff with it
doSomeAsync(Meteor.bindEnvironment(function callback(datum) {
  publishHandler.changed(/* ... */, datum);
}));

//Alternatively with Meteor.setTimeout:
Meteor.setTimeout(function callback() {
  publishHandler.changed(/* ... */, 'someData');
},
10000);
Run Code Online (Sandbox Code Playgroud)

由于它只是一个JS对象,因此您也可以将其保存在数组中或执行任何适合您的操作。
异步地。
英勇地。