【问题标题】:Insert into interval observable插入可观察的区间
【发布时间】:2017-05-29 18:15:14
【问题描述】:

我有一个有一些订阅者的 observable。在定义的时间段内,它对后端进行新的调用并检索信息。我希望能够在指定时刻触发一次性数据加载,在该 observable 中获取该数据,但不要更改间隔。

对于这个 observable,我有一些订阅者。

 NotificationService.notifObservable = Observable.interval(1 * 60 * 1000)
    .startWith(0)
    // merge the observable streams
    .mergeMap(res => this.http.get('ws/message/list'))
    // extract the body from the response
    .map(res => res.json())
    // use only one result
    // that is shared between subscribers
    .publishReplay()
    // converts the connectable observable to observable
    .refCount();

这里我想从同一个 URL 中获取数据并在上面的 observable 中合并数据,但我不想改变它的间隔。这意味着假设此时 observable 提取数据,我在 10 秒和 50 秒后触发重新加载,应该从间隔进行另一个池化。基本上,我只是将数据插入到 observables 流中。我该怎么做?

triggerNotifReload() {

}

【问题讨论】:

    标签: javascript rxjs observable


    【解决方案1】:

    您可以实现该功能,将您的 observable 与 observable (subject) 合并,当您推送一个值时,它会像您一样执行 http 请求。代码将是这样的:

    mySubject: Subject<any> = new Subject<any>();
    
    constructor() {
    
        let myTriggerValueObs = this.mySubject.flatMap(() => this.http.get('ws/message/list'))
    
    
        let notifObservable = Observable.interval(1 * 60 * 1000)
            .startWith(0)
            // merge the observable streams
            .mergeMap(res => this.http.get('ws/message/list'))
            // merge wiht trigger obs
            .merge(myTriggerValueObs)
            // extract the body from the response
            .map(res => res.json())
            // use only one result
            // that is shared between subscribers
            .publishReplay()
            // converts the connectable observable to observable
            .refCount();
    
    }
    
    triggerNotifReload() {
        this.mySubject.next();
    }
    

    我已经测试了代码,它运行良好。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多