Я пишу функцию для записи в пожарный шланг AWS Kinesis с помощью Node. Вызов функции AWS, который записывает в поток пожарного шланга, возвращает «ошибку» или «данные» в зависимости от результата операции. В случае ошибки, для конкретного кода ошибки, мне нужно повторить тот же запрос с exponentialBackoff. Я использую setTimeOut для запуска одного и того же метода с переменным временем для каждой последующей повторной попытки, но похоже, что при каждой повторной попытке я не разрешаю должным образом, и мой тест терпит неудачу с жалобой " Ошибка: превышено время ожидания 5000 мс. Дляасинхронные тесты и перехватчики, убедитесь, что вызывается «done ()», при возврате Promise убедитесь, что он разрешается."
async function batchWrite(records,firehose,retry = 0){
var readingObjects = getReadings(records);
var params = {
DeliveryStreamName: process.env.KINESIS_FIREHOSE_STREAM_DELIVERY,
Records: readingObjects
};
return await new Promise(function(resolve,reject){
firehose.putRecordBatch(params,function(error,data){
if(error){
if(error.code == 'ServiceUnavailableException' && retry < retries.length){
console.log('retryCount=',retry);
setTimeout(batchWrite,retries[retry],records,firehose,retry+1);
console.log('setTimeout',retry);
}
else{
// console.log('Error',error);
console.log('resolving');
resolve(error);
}
}
else{
if(data.FailedPutCount > 0){
//colect the RequestResponses which are not processed.
//index of those records is same as in request
//process those faied records again
console.log('Error',data);
}
resolve(data);
}
});
});
}
для функции выше, в тестовом примере я симулирую ошибкуслучай, возвращая ответ с ServiceUnavailableException, так что он повторяет попытку, но после всех повторных попыток проверьте время ожидания. Есть ли что-то, что мне нужно изменить, чтобы оно заработало.