基于之前的可观察对象切换可观察对象
switch observable based on previous observable
我有一个 observable A,它 returns 布尔值 observable 并且基于 observable A 的值,我需要调用 wither observable B 或 C
observableA = of(true);
observableB(): observable<string> {
}
observableC(): observable<string> {
}
function value () {
return observableA.pipe(map(value => {
if(value) {
return observableB();
} else {
return observableC();
}
}))
}
为了根据真实值区分调用哪个可观察对象。
示例如下
case => true => 多项乘以 10
case => false => multiple item by 20
import { of, Subject } from "rxjs";
import { map } from "rxjs/operators";
const observableInvokeOnTruthy$ = of(1, 2, 3, 4, 5);
const observableInvokeOnFalsy$ = of(1, 2, 3, 4, 5);
const emitValuesSubject$ = new Subject();
emitValuesSubject$.subscribe(response => {
if (response) {
console.log("TRUTHY VALUE:");
observableInvokeOnTruthy$
.pipe(
map(item => {
return item * 10;
})
)
.subscribe(result => {
console.log(result);
});
} else {
console.log("FALSY VALUE:");
observableInvokeOnFalsy$
.pipe(
map(item => {
return item * 20;
})
)
.subscribe(result => {
console.log(result);
});
}
});
emitValuesSubject$.next(false);
emitValuesSubject$.next(true);
您可以使用 switchMap
运算符代替 map
:
function value () {
return observableA.pipe(switchMap(value => {
if(value) {
return observableB();
} else {
return observableC();
}
}))
我有一个 observable A,它 returns 布尔值 observable 并且基于 observable A 的值,我需要调用 wither observable B 或 C
observableA = of(true);
observableB(): observable<string> {
}
observableC(): observable<string> {
}
function value () {
return observableA.pipe(map(value => {
if(value) {
return observableB();
} else {
return observableC();
}
}))
}
为了根据真实值区分调用哪个可观察对象。 示例如下
case => true => 多项乘以 10
case => false => multiple item by 20
import { of, Subject } from "rxjs";
import { map } from "rxjs/operators";
const observableInvokeOnTruthy$ = of(1, 2, 3, 4, 5);
const observableInvokeOnFalsy$ = of(1, 2, 3, 4, 5);
const emitValuesSubject$ = new Subject();
emitValuesSubject$.subscribe(response => {
if (response) {
console.log("TRUTHY VALUE:");
observableInvokeOnTruthy$
.pipe(
map(item => {
return item * 10;
})
)
.subscribe(result => {
console.log(result);
});
} else {
console.log("FALSY VALUE:");
observableInvokeOnFalsy$
.pipe(
map(item => {
return item * 20;
})
)
.subscribe(result => {
console.log(result);
});
}
});
emitValuesSubject$.next(false);
emitValuesSubject$.next(true);
您可以使用 switchMap
运算符代替 map
:
function value () {
return observableA.pipe(switchMap(value => {
if(value) {
return observableB();
} else {
return observableC();
}
}))