gpt4 book ai didi

javascript - Rx.Observable.bindCallback 在 rxjs 中的作用域

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:12 28 4
gpt4 key购买 nike

在 rxjs 4.x 中,Rx.Observable.fromCallback 似乎接受范围作为第二个参数,但在 5.0 中,此方法更改为 Rx.Observable.bindCallback 并且不接受范围参数。如何在 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();

最佳答案

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

所以要绑定(bind)到this,你可以简单地调用

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

关于javascript - Rx.Observable.bindCallback 在 rxjs 中的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258006/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com