gpt4 book ai didi

javascript - 从外部访问源 observable Rx.Observable.prototype

转载 作者:行者123 更新时间:2023-12-03 05:17:31 24 4
gpt4 key购买 nike

在这个方案中,我无法弄清楚如何访问可观察的源(只是想弄清楚如何在不修改 Rx.Observable.prototype 的情况下实现这一点):

      q.drain()
.flatMap(function(val){
return q.backpressure(val, function(cb){
setTimeout(cb,1000);
});
})

我们将背压作为队列原型(prototype)上的方法进行调用:

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值原型(prototype),因为它属于队列实例。我认为我唯一的希望是以某种方式将可观察的源直接传递到背压方法中。有人知道我该怎么做吗?我不介意把这个函数放在其他地方,它不一定是队列上的方法,但我认为无论哪种方式都会存在同样的问题。

如果有帮助,则 flatMap 函数内的 this 值(如果您使用常规函数而不是箭头函数)是一个 MergeMapSubcrimer 对象,请参阅:

enter image description here

但是,经过实验后,我不认为 MergeMapSubscriber 值是我想要用作源的值;我的源应该是 Observable TMK,而不是订阅者。

最佳答案

您是否考虑过将其放在 Observable 原型(prototype)上?

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

关于javascript - 从外部访问源 observable Rx.Observable.prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544760/

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