【问题标题】:Pause, upon resume give last paused value暂停,在恢复时给出最后的暂停值
【发布时间】:2023-03-14 03:17:01
【问题描述】:

我有一个由套接字提供的热Observable。我可以使用pausable 来暂停套接字馈送。但是一旦我“取消暂停”了 observable,我需要显示订阅暂停时套接字可能发送的最后一个值。我不想跟踪套接字手动发送的最后一个值。这怎么可能是合理的?

从文档中的示例,请参阅下面的 cmets:

var pauser = new Rx.Subject();
var source = Rx.Observable.fromEvent(document, 'mousemove').pausable(pauser);

var subscription = source.subscribe(
    function (x) {
        //somehow after pauser.onNext(true)...push the last socket value sent while this was paused...
        console.log('Next: ' + x.toString());
    },
    function (err) {
        console.log('Error: ' + err);
    },
    function () {
        console.log('Completed');
    });

// To begin the flow
pauser.onNext(true); 

// To pause the flow at any point
pauser.onNext(false);  

【问题讨论】:

    标签: rxjs rxjs5


    【解决方案1】:

    您甚至不需要pausable 来执行此操作。 (请注意,您标记了 RxJS5,但 pausable 仅存在于 RxJS 4 中)。您只需要将您的pauser 转换为更高阶的Observable:

    var source = Rx.Observable.fromEvent(document, 'mousemove')
      // Always preserves the last value sent from the source so that
      // new subscribers can receive it.
      .publishReplay(1);
    
    pauser
      // Close old streams (also called flatMapLatest)
      .switchMap(active => 
        // If the stream is active return the source
        // Otherwise return an empty Observable.
        Rx.Observable.if(() => active, source, Rx.Observable.empty())
      )
      .subscribe(/**/)
    
    //Make the stream go live
    source.connect();
    

    【讨论】:

    • 感谢 Paul 的回复,但是我是 rxjs 的新手,很抱歉我没有完全理解上面的例子。 pauser 和 active 来自哪里,它与源有什么关系?我没有看到连接...谢谢
    • @Thibs pauser 与您创建的Subject 相同,它根据流是否应该暂停发出真或假值。如果为 true,则从套接字返回 hot 流(或者在本例中为鼠标移动),如果不是,则不发出任何内容(因此暂停),每次取消暂停时,它都会发出从暂停期间的套接字(如果有的话)
    • 提示:如果您将Observable.empty<T>() 放入其中 T 是source 的类型,那么订阅将获得正确的类型。如果您只是输入Observable.empty,则它无法确定常见类型。例如,我正在使用此代码,但源事件是一个数字,所以我有 .switchMap(enabled => Observable.if(() => enabled, this._orderId, Observable.empty<number>())).subscribe((orderId) => ...),编译器自己将 orderId 设为 number
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多