1

注: このトピックには多くの質問がありますが、(構文の問題などにより) コードを正しい形式にすることができません。これは私の特定のインスタンスに関する質問です。

「lib」フォルダーの下のinit.jsに、web3/ethereumパッケージからイベントを取得してコレクションに保存するコードがあります。ただし、質問は純粋に流星の質問であることに注意してください。Web3/イーサリアムに関するコンテキスト情報を含めました。これは、Web3/イーサリアム イベントを Meteor コレクションに保存する作業を行っている他の人々が遭遇した同様の問題である可能性が高いためです。

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/

4

1 に答える 1

2

交換するだけ

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

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

Meteor.bindEnvironmentラップされた関数がファイバー内で実行されるようにします。

于 2016-04-18T08:08:33.670 に答える