Reactive programming 如何在RxJS v5中暂停和缓冲观测值

Reactive programming 如何在RxJS v5中暂停和缓冲观测值,reactive-programming,rxjs,reactive-streams,Reactive Programming,Rxjs,Reactive Streams,我试图在HTTP请求上实现一种背压策略,在某些条件下暂时将挂起的请求保留几秒钟。暂停的逻辑将基于另一个可观察到的结果 我的研究和理解让我相信,pausableBuffered操作符正是我所需要的。记录在这里 但是,我在ReactivexV5(5.0.0-beta.0)中找不到该操作符,迁移指南(v4-v5)似乎表明它们已被删除。如果是这种情况,如何使用v5可用的操作员实现预期的结果?背压故事现在已经完全结束 以下是获得相同结果的一种方法: const pausableBuffered = (ob

我试图在HTTP请求上实现一种背压策略,在某些条件下暂时将挂起的请求保留几秒钟。暂停的逻辑将基于另一个可观察到的结果

我的研究和理解让我相信,
pausableBuffered
操作符正是我所需要的。记录在这里


但是,我在ReactivexV5(5.0.0-beta.0)中找不到该操作符,迁移指南(v4-v5)似乎表明它们已被删除。如果是这种情况,如何使用v5可用的操作员实现预期的结果?

背压故事现在已经完全结束

以下是获得相同结果的一种方法:

const pausableBuffered = (observable, pauser) => {
    const subj = new rx.Subject();

    let buffer = [];
    const nextEmitter = x => subj.next(x);
    const nextBuffer = x => buffer.push(x);

    let subscriber = nextEmitter;
    observable.subscribe(x => subscriber(x));

    pauser.subscribe(value => {
        if (value) {
            subscriber = nextBuffer;
        } else {
            buffer.forEach(nextEmitter);
            buffer = [];
            subscriber = nextEmitter;
        }
    })

    return subj;
};

我偶然发现了这个答案,因为我的用例我把它变成了一根管子

从“rxjs”导入{Observable,Subject,Subscription};
导出函数pausable(pauseToken:可观察,startPuased:布尔,lastOnly:布尔){
返回函数(来源:主题):可观察{
let缓冲区:T[]=[];
常数nextEmitter=(x:T)=>sub.next(x);
const nextBuffer=(x:any)=>buffer.push(x);
var-sourceSubscription:订阅;
var pauseSubscription:订阅;
var sub=新主题();
let subscriber=nextEmitter;
如果(启动){
订户=nextBuffer;
}
sourceSubscription=source.subscripte({
下一个(值){
订户(价值);
},
错误(错误){
主体错误(错误);
},
完成(){
subc.complete();
暂停订阅?.unsubscribe();
}
})
pauseSubscription=pauseToken.subscribe({
下一个(值){
如果(值){
订户=nextBuffer;
}否则{
if(lastOnly&&buffer.length>0){
nextEmitter(buffer.pop())
}否则{
缓冲区。forEach(nextEmitter);
}
缓冲区=[];
订户=nextEmitter;
}
},
完成(){
sourceSubscription?.unsubscripte();
暂停订阅?.unsubscribe();
}
});
返回主题;
}

}
可观察的
暂停者
是泄漏订阅。