protected async fetchAndHandleResponse(
target: URL,
options: RequestInit,
requestTimeout: number | undefined,
): Promise < ApiResponse > {
const controller = new AbortController();
let timeoutId: NodeJS.Timeout | null = null;
if(requestTimeout && requestTimeout > 0) {
timeoutId = setTimeout(() => controller.abort(), requestTimeout);
}
try {
const response = await fetch(target, {
...options,
signal: controller.signal,
});
// ...
} catch (err) {
if (err instanceof Error) {
if (err.name === "AbortError") {
return Promise.reject(
new ApiError(err.message, 408, { reason: "timeout" }),
);
}
}
// ...
}
}
Post #1171
1.87K
Рубрика "заметки на полях". В Node можно довольно легко поставить timeout для запросов через встроенный fetch. Потребуется AbortController. К примеру:
- 👍 13