@worker-tools/deno-kv-storage
Version:
An implementation of the StorageArea (1,2,3) interface for Deno with an extensible system for supporting various database backends.
18 lines (15 loc) • 504 B
text/typescript
import { deferred } from "./deferred.js";
export class DeadlineError extends Error {
constructor() {
super("Deadline");
this.name = "DeadlineError";
}
}
/**
* Create a promise which will be rejected with DeadlineError when a given delay is exceeded.
*/
export function deadline<T>(p: Promise<T>, delay: number): Promise<T> {
const d = deferred<never>();
const t = setTimeout(() => d.reject(new DeadlineError()), delay);
return Promise.race([p, d]).finally(() => clearTimeout(t));
}