rxjs 4.xではRx.Observable.fromCallbackがスコープを2番目のパラメータとして受け取りますが、5.0ではこのメソッドはRx.Observable.bindCallbackに変更されていますacceptスコープパラメータ。 bindCallbackにスコープパラメータを追加する方法。たとえば、ES6の場合。Rx.Observable.bindCallback(範囲はrxjs内)
class Test {
constructor(input) {
this.input = input;
}
callback(cb) {
return cb(this.input);
}
rx() {
// this works on rx 4.x
// var observable = Rx.Observable.fromCallback(this.callback, this)();
// this doesn't work, because this.callback function doesn't use original this, so cannot get this.input
var observable = Rx.Observable.bindCallback(this.callback)();
// Work around: Rx.Observable.bindCallback(this.callback)();
// var me = this;
// var observable = Rx.Observable.bindCallback((cb) => {me.callback(cb);})();
observable.subscribe(
input => console.log('get data => ' + input),
err => console.log('get error =>' + err),
() => console.log('complete')
);
}
}
new Test(100).rx();
これは別の回避策です。実際には、bindを介して元の関数 'callback'を書き換えます。別の言葉では、私が 'bindCallback'で使う複数の関数を持っていれば、コンストラクタの関数にこれをバインドする必要があります。 –