簡體   English   中英

Rx.Observable.bindCallback,其范圍在rxjs中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM