简体   繁体   English

如何知道何时完成工作 takeUntil

[英]How to know when finished working takeUntil

I need to do the last action when "takeUntil" worked and then send that data further, but I can't know exactly when takeUntil finished work.我需要在“takeUntil”工作时执行最后一个操作,然后进一步发送该数据,但我无法确切知道 takeUntil 何时完成工作。 Thanks to all.谢谢大家。

  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 completes the source Observable up until that. takeUntil在此之前完成源 Observable。 This means that we can utilize completion.这意味着我们可以利用完成。 repeat starts again completed Observable. repeat开始再次完成 Observable。 So we can do something like so:所以我们可以这样做:

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