/**
* Retries JSON payload validation operations with minimal configuration.
*
* @param {object} options Configuration options.
* @param {Array<object>} options.payloads Array of JSON payloads to validate.
* @param {number} options.maxRetries Maximum number of retries per payload. Defaults to 3.
* @param {number} options.retryDelay Delay between retries in milliseconds. Defaults to 1000.
* @param {function} options.validateFunction Function to validate the payload. Should return a boolean.
* @returns {Promise<Array<object>>} A promise that resolves to an array of validation results.
*/
async function retryJsonValidation(options) {
const { payloads, maxRetries = 3, retryDelay = 1000, validateFunction } = options;
if (!payloads || !Array.isArray(payloads) || payloads.length === 0) {
return []; // Return empty array if no payloads are provided.
}
const results = [];
for (const payload of payloads) {
let attempts = 0;
let isValid = false;
while (attempts < maxRetries) {
try {
isValid = await validateFunction(payload); // Validate the payload
if (isValid) {
break; // Exit retry loop if valid
}
} catch (error) {
attempts++;
if (attempts < maxRetries) {
await new Promise(resolve => setTimeout(resolve, retryDelay)); // Wait before retrying
} else {
console.error(`Validation failed after ${maxRetries} retries for payload:`, payload, error);
}
}
}
results.push({ payload, isValid });
}
return results;
}
Add your comment