我有一个订阅,在调用ready()之后,执行一些从其他集合中提取数据的更新:
Meteor.publish('foo',function() { this.ready() // Several times: var extraData = OtherCollection.findOne(...) this.changed(...,extraData) })
如何异步运行这些更新?每次更新都访问数据库,进行一些计算,并在订阅上更改调用.
所有更新完成后我还需要运行代码(重新同步).
解决方法
只需保存发布处理程序并在以后使用它!
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对象,你也可以将它保存在一个数组中或做任何适合你的事情.异步.英勇.