RXjs先向订阅服务器发送一个值,然后再向同一订阅服务器发送另一个值
我正在努力做到以下几点:RXjs先向订阅服务器发送一个值,然后再向同一订阅服务器发送另一个值,rxjs,Rxjs,我正在努力做到以下几点: observable.pipe( emit-value-to-subscriber(false), map((value) => doSomethingWithValue(value)), ).subscribe(console.log); 本质上,从observable截取值,并首先向订阅者发送假值,然后再传输处理后的值 在RXjs中有没有一种很好的方法可以做到这一点?我当前的实现只涉及使用两个订阅者: observable.pipe( map((
observable.pipe(
emit-value-to-subscriber(false),
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
本质上,从observable截取值,并首先向订阅者发送假值,然后再传输处理后的值
在RXjs中有没有一种很好的方法可以做到这一点?我当前的实现只涉及使用两个订阅者:
observable.pipe(
map(() => false),
).subscribe(console.log);
observable.pipe(
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
但我对这种方法的可靠性(事件顺序)有严重的怀疑。有多种方法可以做你想做的事情 假设
doSomethingWithValue
返回布尔值,则可以使用startWith
运算符:
observable.pipe(
map((value) => doSomethingWithValue(value)),
startWith(false),
).subscribe(console.log);
您也可以使用concat
:
concat(
of(false),
observable.pipe(map(value => doSomethingWithValue(value)),
).subscribe(console.log);
您还可以在switchMap
内部使用concat
:
observable.pipe(
switchMap(value => concat(of(false), of(doSomethingWithValue(value)))),
).subscribe(console.log);
observable.pipe(
tap(_ => observer.next(false)),
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
如果有不同的观察者,您可以使用点击:
observable.pipe(
switchMap(value => concat(of(false), of(doSomethingWithValue(value)))),
).subscribe(console.log);
observable.pipe(
tap(_ => observer.next(false)),
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
做你想做的事有多种方法
假设doSomethingWithValue
返回布尔值,则可以使用startWith
运算符:
observable.pipe(
map((value) => doSomethingWithValue(value)),
startWith(false),
).subscribe(console.log);
您也可以使用concat
:
concat(
of(false),
observable.pipe(map(value => doSomethingWithValue(value)),
).subscribe(console.log);
您还可以在switchMap
内部使用concat
:
observable.pipe(
switchMap(value => concat(of(false), of(doSomethingWithValue(value)))),
).subscribe(console.log);
observable.pipe(
tap(_ => observer.next(false)),
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
如果有不同的观察者,您可以使用点击:
observable.pipe(
switchMap(value => concat(of(false), of(doSomethingWithValue(value)))),
).subscribe(console.log);
observable.pipe(
tap(_ => observer.next(false)),
map((value) => doSomethingWithValue(value)),
).subscribe(console.log);
没有concat
和startsWith
的解决方案-如果您想要处理流,例如false、true、false、false、
,您将得到false、%mod false%、true、%mod true%…
Observable.from(false)
.pipe(
flatMap(x$ => from([x$, doSomethingWithAValue(x$)])),
)
没有concat
和startsWith
的解决方案-如果您想要处理流,例如false、true、false、false、
,您将得到false、%mod false%、true、%mod true%…
Observable.from(false)
.pipe(
flatMap(x$ => from([x$, doSomethingWithAValue(x$)])),
)
抱歉,我应该更清楚,这不是一个“一次性”观察,但必须与false交叉的持续值,startWith不会切断它。抱歉,我应该更清楚,这不是一个“一次性”观察,但必须与false交叉的持续值,startWith不会切断它。