流星:异步更新订阅
我有一个订阅,在调用ready()
,会执行大量更新从其他集合中提取数据:
Meteor.publish('foo', function() {
this.ready()
// Several times:
var extraData = OtherCollection.findOne(...)
this.changed(..., extraData)
})
我怎样才能异步运行这些更新? 每个更新访问数据库,进行一些计算,并且changed
订阅上的调用。
我还需要在所有更新完成(重新同步)后运行代码。
只需保存发布处理程序并稍后使用它!
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);
由于它只是最后的一个JS对象,你也可以将它保存在一个数组中或者做任何适合你的事情。
异步。
英勇。