rxjs - 从 observable 中获取第一个和最后一个发出的值

标签 rxjs observable

有没有办法从 observable 中获取第一个和最后一个发出的值?

const down$ = fromEvent(this.canvas, 'mousedown');
const up$ = fromEvent(this.canvas, 'mouseup');
const move$ = fromEvent(this.canvas, 'mousemove');
const drag$ = move$.pipe(
  skipUntil(down$),
  takeUntil(up$)
);
drag$.subscribe((e: MouseEvent) => {
  console.log(e);
});

有没有办法从 drag$ observable 中获取第一个和最后一个值?

最佳答案

您可以使用 take(1) 从 Observable 中获取第一个和最后一个值。和 takeLast(1)运营商。

import { range, merge, Subject } from 'rxjs';
import { take, takeLast, multicast } from 'rxjs/operators';

range(1, 10)
  .pipe(
    multicast(() => new Subject(), o => merge(
      o.pipe(take(1)),
      o.pipe(takeLast(1)),
    )),
  )
  .subscribe(v => console.log('result', v));

在您的情况下,您似乎可以执行以下操作,但我不知道您的目标到底是什么:
down$
  .pipe(
    switchMap(() => move$.pipe(
      takeUntil(up$),
      multicast(() => new Subject(), o => merge(
        o.pipe(take(1)),
        o.pipe(takeLast(1)),
      )),
    )),
  )
  .subscribe(console.log);

看现场演示:https://stackblitz.com/edit/rxjs6-demo-ymjoiy?file=index.ts

关于rxjs - 从 observable 中获取第一个和最后一个发出的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52780649/

相关文章:

javascript - RxJs Observable 从支持拉动

javascript - Angular-CLI 错误 : Return type of public method from exported class has or is using name 'ErrorObservable' from external module but cannot be named

angular - 取消订阅 ReplaySubject 返回 asObservable();

angular - 如何使用 Observable 调用等待事件订阅者完成

java - Kotlin 接口(interface)可以缓存值吗?

angular - 如果满足条件,稍后使用 takeUntil 取消订阅

angular - 如何在 Observable 中返回模拟数据?

angular - 在服务中拥有持久数据的正确方法

scheduled-tasks - 使用 Observables 进行轮询的手动递归的更新版本是什么?

ios - 如何对 rxSwift 变量进行串行执行?