【问题标题】:RxJS - split Observable into two, wait for first to finishRxJS - 将 Observable 一分为二,等待第一个完成
【发布时间】:2018-04-19 21:04:31
【问题描述】:

我有一个或多或少看起来像这样的 Observable:

-a--b-c---d--e----f--->

其中 a、b、c、d、e、f 是发射值。

我想把这个 Observable 分成两个 Observable,这样最后一个发出的值是“单独的”。

-a--b-c---d--e-------->

------------------f--->

现在,我想等待第一个 Observable 完全完成(甚至是内部的 Observable),然后执行第二个 Observable。

我知道,我可能应该使用 concat,但实际上我正在努力将 Observable 一分为二

【问题讨论】:

  • 所以你想要一个流包含除最后一个之外的所有值,而另一个只包含最后一个?
  • 没错,然后我希望第一个流在第二个开始之前完成

标签: javascript rxjs observable reactive-programming


【解决方案1】:

这看起来相当简单,因为有 skipLasttakeLast 运算符:

const source = ...;

const first = source.skipLast(1);
const second = source.takeLast(1);

【讨论】:

    【解决方案2】:
    let Rx = require('rxjs/Rx');
    
    let arr = ["a", "b", "c", "d", "e"]
    let par = Rx.Observable.from(arr).partition((v, i) => i < arr.length - 1)
    let res = Rx.Observable.concat(par[0], par[1])
    
    res.subscribe(
        x => console.log('On Next: %s', x),
        e => console.log('On Error: %s', e),
        () => console.log('On Complete')
    )
    

    【讨论】:

    • 我应该说我想在第一个 Observable 完成之前开始发射值
    猜你喜欢
    • 2021-08-28
    • 2018-03-17
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多