mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Add logging of errors whenever ProxyAgent is used, and a test for it.
Summary: Also: - Move ProxyAgent to from app/server/utils to app/server/lib, which is the more usual place for such classes. - Refactor a helper (delayAbort) that node was reporting a leak in. Test Plan: Added a test case, and tested manually. Reviewers: JakubSerafin Reviewed By: JakubSerafin Subscribers: JakubSerafin, paulfitz Differential Revision: https://phab.getgrist.com/D3897
This commit is contained in:
@@ -178,25 +178,21 @@ export function getSupportedEngineChoices(): EngineCode[]|undefined {
|
||||
* Returns a promise that resolves in the given number of milliseconds or rejects
|
||||
* when the given signal is raised.
|
||||
*/
|
||||
export function delayAbort(msec: number, signal?: AbortSignal): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
let resolved = false;
|
||||
const timeout = setTimeout(() => {
|
||||
if (!resolved) {
|
||||
resolved = true;
|
||||
resolve();
|
||||
}
|
||||
}, msec);
|
||||
if (signal?.addEventListener) {
|
||||
signal.addEventListener('abort', (ev) => {
|
||||
if (!resolved) {
|
||||
resolved = true;
|
||||
clearTimeout(timeout);
|
||||
reject(ev);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
export async function delayAbort(msec: number, signal?: AbortSignal): Promise<void> {
|
||||
let cleanup: () => void = () => {};
|
||||
try {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const timeout = setTimeout(() => resolve(), msec);
|
||||
signal?.addEventListener('abort', reject);
|
||||
cleanup = () => {
|
||||
// Be careful to clean up both the timer and the listener to avoid leaks.
|
||||
clearTimeout(timeout);
|
||||
signal?.removeEventListener('abort', reject);
|
||||
};
|
||||
});
|
||||
} finally {
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user