[英]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.