4

ntwitter node.js モジュールを使用して、流星アプリ内から Twitter のストリーミング API にアクセスしていますが、コールバック関数内のコレクションに挿入しようとすると、アプリがクラッシュします。

twitter.stream('statuses/filter', {'track':'whatever'}, function(stream) {
  stream.on('data', function (data) {
      //logging the data coming back works fine
      console.log(data);
      //the next line throws "Error: Meteor code must always run within a Fiber"
      Tweets.insert(data); 
  });
});

Meteors 線形実行モデルのコンテキストで非同期コールバックを使用するための推奨されるアプローチはありますか? 動作しているように見える新しいファイバー内に挿入をラップしようとしましたが、それが持つ可能性のある影響についてはわかりません。

私はこれを見つけましたhttp://gist.io/3443021は役に立ちましたが、どのアプローチが私の特定のケースに適しているのかまだわからないので、助けていただければ幸いです。

乾杯

4

2 に答える 2

0

別のデザインパターンを使用しました。非同期コールバックでは、デバイス ドライバーのように動作し、単に結果をメモリにバッファリングします。

var tweets = [];

twitter.stream('statuses/filter', {'track':'whatever'}, function(stream) {
  stream.on('data', function (data) {
      //logging the data coming back works fine
      console.log(data);
      //the next line throws "Error: Meteor code must always run within a Fiber"
      tweets.push(data); 
  }); 
});

その後、Fiber 内の通常の Meteor 実行環境に戻り、タイマーまたは関数の結果として、つぶやき配列を空にしてから挿入を行います。Javascript 配列は、ファイバー内で実行されているかどうかは気にしません。

私たちの場合、ツイートではなく非同期 IMAP メールでこれを行っていますが、類推は依然として有効です。

于 2013-01-12T14:53:27.463 に答える