Refactor error handling and response handling in BatchHTTP module

This commit is contained in:
Aaro Varis
2024-09-29 18:41:37 +03:00
parent f1f53c9b85
commit bae17a9b9a
2 changed files with 21 additions and 10 deletions

View File

@@ -91,7 +91,12 @@ function DoRequest(request)
end end
end end
print("[BatchHTTP] got response",id) if response.error then
warn('[BatchHTTP] request '..id..' errored "'..response.error.message..'"')
else
print("[BatchHTTP] got response "+response.status,id)
end
return response.data return response.data
end end

View File

@@ -29,9 +29,11 @@ async function main() {
} }
responses[instanceId].push({ responses[instanceId].push({
id: response.id, id: response.id,
data: response.data data: response.data,
error: response.error,
status: response.status
}) })
console.log(`Response registered for instance ${instanceId}`); //console.log(`Response registered for instance ${instanceId}`);
setTimeout(() => { setTimeout(() => {
if (!responses[instanceId]) { if (!responses[instanceId]) {
return; return;
@@ -41,7 +43,7 @@ async function main() {
}, 60_000); }, 60_000);
} }
async function DoRequest(instanceId, requestObj) { async function DoRequest(instanceId, requestObj, retriesLeft = 3) {
const requestParams = requestObj.request || {}; const requestParams = requestObj.request || {};
const method = requestParams.Method?.toLowerCase() || 'get'; const method = requestParams.Method?.toLowerCase() || 'get';
const url = requestParams.Url || ''; const url = requestParams.Url || '';
@@ -70,16 +72,20 @@ async function main() {
data: response.data data: response.data
}); });
} catch (error) { } catch (error) {
if (RETRY_ERROR_CODES.includes(error.response?.status)) { const statusCode = error.response?.status;
console.log(`Retrying request ${requestObj.id} for instance ${instanceId}`); if (RETRY_ERROR_CODES.includes(statusCode) && retriesLeft > 0) {
SetTimeout(() => { console.log(`Retrying request ${requestObj.id} for instance ${instanceId}, HTTP ${statusCode}`);
DoRequest(instanceId, requestObj); setTimeout(() => {
}, 5000); DoRequest(instanceId, requestObj, retriesLeft - 1);
}, 1000);
} else { } else {
RegisterResponse(instanceId, { RegisterResponse(instanceId, {
id: requestObj.id, id: requestObj.id,
data: error.response?.data, data: error.response?.data,
error: "yep there was an error" status: statusCode,
error: {
message: error.message || 'Unknown error',
}
}); });
} }
} }