Javascript 从外部Rx.observable.prototype访问可观测源
在这个方案中,我很难弄清楚如何访问源observable(只是试图弄清楚如何在不修改Rx.observable.prototype的情况下访问源observable): 我们将背压称为队列原型上的一种方法:Javascript 从外部Rx.observable.prototype访问可观测源,javascript,node.js,rxjs5,angular2-observables,Javascript,Node.js,Rxjs5,Angular2 Observables,在这个方案中,我很难弄清楚如何访问源observable(只是试图弄清楚如何在不修改Rx.observable.prototype的情况下访问源observable): 我们将背压称为队列原型上的一种方法: q.drain() .flatMap(function(val){ return q.backpressure(val, function(cb){ setTimeout(cb,1000);
q.drain()
.flatMap(function(val){
return q.backpressure(val, function(cb){
setTimeout(cb,1000);
});
})
Queue.prototype.backpressure = function(val, fn){
const source = ? // I don't know how to access the source observable...
return Rx.Observable.create(sub => {
return source.subscribe(val => {
fn.call(source, val, function(err, val){
if(err){
sub.error(err);
}
else{
sub.next(val);
}
});
},
// be sure to handle errors and completions as appropriate and
// send them along
err => sub.error(err),
() => sub.complete());
});
};
但问题是,我不知道我是否可以访问此方案中可观察到的源-源的正确值肯定不是原型中的this
值,因为它属于队列实例。我认为我唯一的希望是以某种方式将可观测的源直接传递到背压方法中。有人知道我是怎么做到的吗?我不介意把这个函数放在其他地方,它不一定是队列上的方法,但我认为同样的问题也会存在
如果有帮助,flatMap函数(如果使用常规函数而不是箭头函数)中的this
的值是MergeMapSubcriber对象,请参见:
但是,经过实验,我不相信MergeMapSubcriber值是我想要用作源的值;我的来源应该是一个可观察的TMK,而不是订阅者。你有没有想过把它放在
可观察的原型上
Observable.prototype.backpressure = function(queue, fn){
const source = this;
return this.flatMap(function(val){
return Rx.Observable.create(sub => {
return source.subscribe...
});
})
};
然后,对于队列:
q.drain()
.backpressure(q, function(cb) {
setTimeout(cb,1000);
});
是的,那很好,但是如果不把它放在原型机上,就想办法做到这一点就好了,至少作为练习,一定有办法!我更新了OP,让我知道这是否提供了更多有用的信息info@Alexander米尔斯,我不认为你可以从平面地图上找到它。事实上,我认为你不需要从平面地图上找到源代码,我想我可能想得太多了,当使用flatMap时,我认为RxJS库为您完成了源到目标的连接,您不需要手动进行连接,您只是提供了转换。