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不会切断它。