appium-xcuitest-driver
Version:
Appium driver for iOS using XCUITest for backend
29 lines (27 loc) • 747 B
text/typescript
/** Error thrown by {@link withTimeout} when the deadline is exceeded. */
export class TimeoutError extends Error {
constructor(message?: string) {
super(message ?? 'Operation timed out');
this.name = 'TimeoutError';
}
}
/** Resolves with `promise` or rejects if it does not settle before `timeoutMs`. */
export async function withTimeout<T>(
promise: Promise<T>,
timeoutMs: number,
message?: string,
): Promise<T> {
let timer: NodeJS.Timeout | null = null;
try {
return await Promise.race([
promise,
new Promise<T>((_resolve, reject) => {
timer = setTimeout(() => reject(new TimeoutError(message)), timeoutMs);
}),
]);
} finally {
if (timer) {
clearTimeout(timer);
}
}
}