Rx.Observable.bindCallback 范围在 rxjs 中
Rx.Observable.bindCallback with scope in rxjs
在rxjs中好像4.x,Rx.Observable.fromCallback接受scope作为第二个参数,但是在5.0中,这个方法改为Rx.Observable.bindCallback,不接受scope参数。如何在 bindCallback 中添加范围参数。例如在 ES6.
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();
当我将它添加到构造函数时,它对我有用
constructor(input) {
this.input = input;
this.callback = this.callback.bind(this)
}
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback 中有一个示例说明如何执行此操作。
Use bindCallback on object method
const boundMethod = Rx.Observable.bindCallback(someObject.methodWithCallback);
boundMethod.call(someObject) // make sure methodWithCallback has access to someObject
.subscribe(subscriber);
你可以在不声明变量的情况下立即调用它,也可以像这样传递参数:
Rx.Observable.bindCallback(someObject.callback).call(someObject,<args>)
因此,要绑定到 this
,您只需调用
Rx.Observable.bindCallback(this.callback).call(this,<args>)
在rxjs中好像4.x,Rx.Observable.fromCallback接受scope作为第二个参数,但是在5.0中,这个方法改为Rx.Observable.bindCallback,不接受scope参数。如何在 bindCallback 中添加范围参数。例如在 ES6.
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();
当我将它添加到构造函数时,它对我有用
constructor(input) {
this.input = input;
this.callback = this.callback.bind(this)
}
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback 中有一个示例说明如何执行此操作。
Use bindCallback on object method
const boundMethod = Rx.Observable.bindCallback(someObject.methodWithCallback); boundMethod.call(someObject) // make sure methodWithCallback has access to someObject .subscribe(subscriber);
你可以在不声明变量的情况下立即调用它,也可以像这样传递参数:
Rx.Observable.bindCallback(someObject.callback).call(someObject,<args>)
因此,要绑定到 this
,您只需调用
Rx.Observable.bindCallback(this.callback).call(this,<args>)