[英]Rx.Observable.bindCallback with scope in rxjs
似乎在rxjs 4.x中,Rx.Observable.fromCallback接受范圍作為第二個參數,但在5.0中,此方法更改為Rx.Observable.bindCallback並且不接受范圍參數。 如何在bindCallback中添加scope參數。 例如在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();
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback上有一個示例,說明了如何執行此操作。
在對象方法上使用bindCallback
const boundMethod = Rx.Observable.bindCallback(someObject.methodWithCallback); boundMethod.call(someObject) // make sure methodWithCallback has access to someObject .subscribe(subscriber);
你可以在不聲明變量的情況下立即調用它,並且還傳遞這樣的args:
Rx.Observable.bindCallback(someObject.callback).call(someObject,<args>)
所以要綁定到this
你可以簡單地調用
Rx.Observable.bindCallback(this.callback).call(this,<args>)
當我將它添加到構造函數時,它適用於我
constructor(input) {
this.input = input;
this.callback = this.callback.bind(this)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.