Skip to content

Instantly share code, notes, and snippets.

@dougpagani
Created March 18, 2021 18:44
Show Gist options
  • Save dougpagani/6598151c686b2c0aaa62f552ec8f27c2 to your computer and use it in GitHub Desktop.
Save dougpagani/6598151c686b2c0aaa62f552ec8f27c2 to your computer and use it in GitHub Desktop.
comparing http error handlers
export async function uploadFileToS3(part, projectNumber, partNumber, attachmentBool, failureHandler) {
try {
// send http request to file-handler server
var requestResult = await uploadFileToS3Request(part, projectNumber, partNumber, attachmentBool)
// return the response of file-handler upload
return parseUploadFileToS3Response(requestResult)
} catch(error) {
failureHandler(part, projectNumber, partNumber, attachmentBool, requestResult, error)
}
}
function uploadFileToS3FailureHandler (part, projectNumber, partNumber, attachmentBool, requestResult, error) {
// initialize or increment retryCounter
(retryCounter === undefined) ? retryCounter = 0 : retryCounter++
if (error.message === 'Empty response body') { throw error }
// 500 status code, retry
if (error.message === '500' || error.message === 'Failed to fetch') {
// retry twice before throwing
if (retryCounter <= 2) {
// delay 1 second and retry
await sleep(1000)
return uploadFileToS3(part, projectNumber, partNumber, attachmentBool, retryCounter)
} else {
// didnt complete request even after retrying
throw error
}
let logObj
// format the response from the request
try { logObj = {status: requestResult.status, body: requestResult.value} }
// set log object to undefined if there was no requesResult (fetch request threw an error)
catch(e) { logObj = undefined }
let requestObject = { part, projectNumber, partNumber, attachmentBool, retryCounter }
// send an email that this is an undhandled error
logUnexpected(error, requestObject, logObj, 'uploadFileToS3')
throw error
}
}
export async function uploadFileToS3(part, projectNumber, partNumber, attachmentBool, retryCounter) {
// initialize or increment retryCounter
(retryCounter === undefined) ? retryCounter = 0 : retryCounter++
try {
// send http request to file-handler server
var requestResult = await uploadFileToS3Request(part, projectNumber, partNumber, attachmentBool)
// return the response of file-handler upload
return parseUploadFileToS3Response(requestResult)
} catch(error) {
if (error.message === 'Empty response body') { throw error }
// 500 status code, retry
if (error.message === '500' || error.message === 'Failed to fetch') {
// retry twice before throwing
if (retryCounter <= 2) {
// delay 1 second and retry
await sleep(1000)
return uploadFileToS3(part, projectNumber, partNumber, attachmentBool, retryCounter)
} else {
// didnt complete request even after retrying
throw error
}
}
let logObj
// format the response from the request
try { logObj = {status: requestResult.status, body: requestResult.value} }
// set log object to undefined if there was no requesResult (fetch request threw an error)
catch(e) { logObj = undefined }
let requestObject = { part, projectNumber, partNumber, attachmentBool, retryCounter }
// send an email that this is an undhandled error
logUnexpected(error, requestObject, logObj, 'uploadFileToS3')
throw error
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment