1

Node walkは、このようないくつかのイベントを API に提示します。

walker.on('file', (root, filestats, next) => {
  // next should be called to goto next file
  next();
});
walker.on('end', () => {
  // the end of the stream
});

subscriberから関数を呼び出してsource、ストリーム内の次のアイテムに移動するように通知する場合、それは反応的ですか? イベントは、サブスクライバーがそれに反応するのを待ちませんよね?

これを Rx Observable に変換するにはどうすればよいですか?

4

2 に答える 2

1

試してくださいRx.Observable.fromCallback

var walkerOn = Rx.Observable.fromCallback(walker.on, walker)
var source = walkerOn('file');
var subscription = source.subscribe(observer);
于 2015-05-23T15:16:45.543 に答える
1

あなたの最善の策は、その周りにラッパーを作成することです:

Rx.Observable.fromWalk = function(root, options, scheduler) {
  scheduler = scheduler || Rx.Scheduler.currentThread;

  return Rx.Observable.create(function(observer) {
    var walker = walk.walk(root, options);

    function fileHandler(x) {
      observer.onNext({stats : x.stats, root : x.root});
      scheduler.scheduleWithState(x, function(s, i) {
        i.next();
      });
    }

    var files = Rx.Observable.fromEvent(walker, 'file', 
      function(arr) {
        return { root : arr[0], stats : arr[1], next : arr[2] };
    });
    var ended = Rx.Observable.fromEvent(walker, 'end');

    return new Rx.CompositeDisposable(
      files.subscribe(fileHandler),
      ended.subscribe(observer.onCompleted.bind(observer))
    );
  });
};

それに応じてあなたの例を更新しました

于 2015-05-23T20:41:14.413 に答える