【发布时间】:2017-05-23 12:31:24
【问题描述】:
在这个方案中,我无法弄清楚如何访问源 observable(只是想弄清楚如何在不修改 Rx.Observable.prototype 的情况下做到这一点):
q.drain()
.flatMap(function(val){
return q.backpressure(val, function(cb){
setTimeout(cb,1000);
});
})
我们将背压称为 Queue 原型上的一种方法:
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 值是我想用作源的值;我的来源应该是 Observable TMK,而不是订阅者。
【问题讨论】:
标签: javascript node.js rxjs5 angular2-observables