/** Promise 超时包装:超时后 reject,不取消原任务。 */ export function withTimeout( promise: Promise, ms: number, message = 'TIMEOUT', ): Promise { return new Promise((resolve, reject) => { const timer = window.setTimeout(() => reject(new Error(message)), ms); promise.then( (value) => { window.clearTimeout(timer); resolve(value); }, (err) => { window.clearTimeout(timer); reject(err); }, ); }); } export function isTimeoutError(error: unknown): boolean { return error instanceof Error && error.message === 'TIMEOUT'; }