如何在光纤内运行Meteor插入

时间:2016-04-18 06:39:03

标签: javascript meteor ethereum

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

我在“lib”文件夹下的init.js中有一些代码从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 code must always run within a Fiber.错误。通常情况下,我会使用Meteor方法插入,但我怀疑在实际插入时会出现相同的错误。

关于stackoverflow的这个错误有很多问题,但是我还没有真正能够正确地在光纤中获取代码。我试图在这里遵循这个例子,但我认为这只是对我对Meteor的理解的方法: https://meteorhacks.com/fibers-eventloop-and-meteor/

1 个答案:

答案 0 :(得分:2)

只需替换

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

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

Meteor.bindEnvironment确保包装函数在光纤内运行。