Javascript 如何在光纤中运行Meteor insert

Javascript 如何在光纤中运行Meteor insert,javascript,meteor,ethereum,Javascript,Meteor,Ethereum,注意:关于这个主题有很多问题,但是我无法将我的代码(由于语法问题等)转换成正确的格式。这是一个关于我的具体例子的问题 我在init.js中的“lib”文件夹下有一些代码,用于从web3/ethereum包中获取事件并将其存储在集合中。请注意,这个问题纯粹是一个流星问题。我已经包含了关于web3/ethereum的上下文信息,因为其他人在Meteor集合中存储web3/ethereum事件时可能会遇到类似的问题 var events = contract_instance.allEvents([]

注意:关于这个主题有很多问题,但是我无法将我的代码(由于语法问题等)转换成正确的格式。这是一个关于我的具体例子的问题

我在init.js中的“lib”文件夹下有一些代码,用于从web3/ethereum包中获取事件并将其存储在集合中。请注意,这个问题纯粹是一个流星问题。我已经包含了关于web3/ethereum的上下文信息,因为其他人在Meteor集合中存储web3/ethereum事件时可能会遇到类似的问题

var events = contract_instance.allEvents([]);

events.watch(function(error, event){
  if (!error)
    console.log(event.args);

var event_object_value1 = event.args.value1;
//everything up to this point works fine.  event_object is in a json format.

//inserting the value into a collection on the server side like this is what causes the error.
collection.insert({"key": value1});
});
最后一行生成的Meteor代码必须始终在光纤中运行。错误。通常,我会使用Meteor方法进行插入,但我怀疑在实际执行插入时会出现相同的错误

关于stackoverflow的这个错误有很多问题,但我还没有真正能够在光纤中正确地获取代码。我试着在这里遵循这个例子,但我认为这只是超越我对流星的理解的一种方式:

只需更换

events.watch(function(error, event) {
  ...
});

Meteor.bindEnvironment
确保包装的功能在光纤中运行

events.watch(Meteor.bindEnvironment(function(error, event) {
  ...
}));