【问题标题】:Conditionally choose observable in RxJS有条件地在 RxJS 中选择 observable
【发布时间】:2017-03-09 10:57:19
【问题描述】:

我想知道如何创建一个新的 observable,它将根据第一个 observable 是否为空(默认情况下不调用第二个 observable)返回两个其他 observable 之一。例如:

// scenario 1
let obs1 = Observable.empty();
let obs2 = Observable.of([1,2,3]);
// This line doesn't work, but is essentially what I'm attempting to do
let obs3 = (obs1.isEmpty()) ? obs2 : obs1;
obs3.subscribe( i => console.log('Next: ', i));
// Next: 1
// Next: 2
// Next: 3
// Complete

// scenario 2
let obs1 = Observable.of([6,7,8]);
let obs2 = Observable.of([1,2,3]);
// This line doesn't work, but is essentially what I'm attempting to do
let obs3 = (obs1.isEmpty()) ? obs2 : obs1;
obs3.subscribe( i => console.log('Next: ', i));
// Next: 6
// Next: 7
// Next: 8
// Complete

【问题讨论】:

    标签: javascript typescript rxjs observable


    【解决方案1】:

    你可以试试:

    let obs3 = obs1.isEmpty().map(x => x? obs2 : obs1;)
    

    现在将快速检查是否可行。

    是的,根据doc,应该没问题,因为isEmpty 会发出一个布尔值,如果 observable 为空则为 true,因此您可以使用它来获取所需的 observable。

    【讨论】:

    • 不应该是flatMap/mergeMap吗?
    • 他说without calling the second observable by default,所以我认为map 是合适的。现在,鉴于这些示例,flatMap 可能更合适。
    • 是的,我明白你的意思;该问题对“默认情况下”的使用可以解释。
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多