2016-03-28 20 views
4

rxjs 4.x, Rx.Observable.fromCallback, ikinci parametre olarak kapsamı kabul eder, ancak 5.0, bu yöntem Rx.Observable.bindCallback olarak değiştirilir ve yok kapsam parametresini kabul eder. BindCallback'te kapsam parametresi nasıl eklenir. Örneğin ES6'da.Rx.Observable.bindCallback rxjs kapsamı

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(); 

cevap

1

Ben yapıcı

constructor(input) { 
    this.input = input; 
    this.callback = this.callback.bind(this) 
    } 
+1

Bu başka bir iştir. Aslında, orijinal işlevini 'callback' işlevini bind ile yeniden yazarsınız. Başka bir deyişle, 'bindCallback' işlevinde kullanacağım birden çok işlev varsa, bunu yapıcıdaki bu işlevlere bağlamalıyım. –

3

Bunun nasıl gösterir http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback bir örnek vardır bu eklerken O benim için çalışıyor. Nesne yöntemine

Kullanım bindCallback

const boundMethod = Rx.Observable.bindCallback(someObject.methodWithCallback); boundMethod.call(someObject) // make sure methodWithCallback has access to someObject .subscribe(subscriber);

Böyle args geçmesi aynı zamanda bir değişken bildirerek olmadan hemen çağırabilirsiniz

:

Rx.Observable.bindCallback(someObject.callback).call(someObject,<args>) 

Yani etmek this ile bağlantı kurarak

01 numaralı telefonu arayabilirsiniz.
Rx.Observable.bindCallback(this.callback).call(this,<args>) 
+0

Veya 'const mine = Rx.Observable.bindCallback (someObject.callback.bind (someObject)); mine.subscribe (console.info) ' – DarkNeuron