繁体   English   中英

如何知道何时完成工作 takeUntil

[英]How to know when finished working takeUntil

我需要在“takeUntil”工作时执行最后一个操作,然后进一步发送该数据,但我无法确切知道 takeUntil 何时完成工作。 谢谢大家。

  ngOnInit(): void {
    const thumb = document.getElementById("thumb");
    const track: HTMLElement = document.getElementById("track");
    const activeTrack = document.getElementById("active-track");
    const mouseUp = fromEvent(document, "mouseup");

    const mouseMove = fromEvent(document, "mousemove").pipe(
      map((item) => this.mouseEventToCoordinate(item, track))
    );
    const activeTrackClick = fromEvent(activeTrack, "click").pipe(
      map((item) => this.mouseEventToCoordinate(item, track))
    );
    const trackClick = fromEvent(track, "click").pipe(
      map((item) => this.mouseEventToCoordinate(item, track))
    );
    const mouseDown = fromEvent(thumb, "mousedown");

    mouseDown
      .pipe(
        switchMap(() => mouseMove),
        merge(trackClick, activeTrackClick),
        takeUntil(mouseUp),
        repeat()
      )
      .subscribe((item: { trackWidth: number; position: number }) => {
        const newX = (item.position / item.trackWidth) * 100;
        activeTrack.style.width = (newX + 1).toString() + "%";
        thumb.style.left = newX.toString() + "%";

        if (item === "Done") {
          // Do somethings
        }
      });  
    }

takeUntil在此之前完成源 Observable。 这意味着我们可以利用完成。 repeat开始再次完成 Observable。 所以我们可以这样做:

mouseDown
  .pipe(
    switchMap(() => mouseMove),
    merge(trackClick, activeTrackClick),
    takeUntil(mouseUp),
    tap({ complete: () => doSomething() }), // This will execute when mouseUp emits and takeUntil completes source Observable
    repeat(),
  )
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM