mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add support for canceling a delay
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
9704598e92
commit
5591c59f26
@ -4,6 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type AbortController from "abort-controller";
|
import type AbortController from "abort-controller";
|
||||||
|
import type { Disposer } from "./disposer";
|
||||||
|
import { disposer } from "./disposer";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a promise that will be resolved after at least `timeout` ms have
|
* Return a promise that will be resolved after at least `timeout` ms have
|
||||||
@ -12,13 +14,22 @@ import type AbortController from "abort-controller";
|
|||||||
* @param timeout The number of milliseconds before resolving
|
* @param timeout The number of milliseconds before resolving
|
||||||
* @param failFast An abort controller instance to cause the delay to short-circuit
|
* @param failFast An abort controller instance to cause the delay to short-circuit
|
||||||
*/
|
*/
|
||||||
export function delay(timeout = 1000, failFast?: AbortController): Promise<void> {
|
export function delay(timeout = 1000, failFast?: AbortController): Promise<void> & { cancel: Disposer } {
|
||||||
return new Promise(resolve => {
|
const cancel = disposer();
|
||||||
|
|
||||||
|
return Object.assign(new Promise<void>(resolve => {
|
||||||
const timeoutId = setTimeout(resolve, timeout);
|
const timeoutId = setTimeout(resolve, timeout);
|
||||||
|
|
||||||
failFast?.signal.addEventListener("abort", () => {
|
cancel.push(() => clearTimeout(timeoutId));
|
||||||
clearTimeout(timeoutId);
|
|
||||||
resolve();
|
if (failFast) {
|
||||||
});
|
const onAbort = () => {
|
||||||
});
|
clearTimeout(timeoutId);
|
||||||
|
resolve();
|
||||||
|
};
|
||||||
|
|
||||||
|
failFast.signal.addEventListener("abort", onAbort);
|
||||||
|
cancel.push(() => failFast.signal.removeEventListener("abort", onAbort));
|
||||||
|
}
|
||||||
|
}), { cancel });
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user