Я пытаюсь выяснить, как создать универсальную функцию повтора, которая экспоненциально откатывает любое переданное ей обещание. Похоже, что все работает, за исключением нескольких вещей. Если функция разрешается с первой попытки, тогда я вижу свое значение разрешения, и она выходит из системы, как и ожидалось. Если он разрешается при любом последующем вызове, он не выходит из системы. Если он отклоняет, я получаю пару предупреждений об устаревании, которые я еще не изучал. Вот код ...
function retry(func, max, time) {
console.log(max);
return new Promise((resolve, reject) => {
func()
.then(r => resolve(r))
.catch(err => {
if (max === 0) {
reject(err);
} else {
setTimeout(function(){
retry(func, --max, time * 2);
}, time);
}
});
});
}
const promise = retry(function () {
return new Promise((resolve, reject) => {
const rand = Math.random();
if (rand >= 0.8) {
resolve('hey');
} else {
reject(new Error('oh noes'));
}
});
}, 5, 100);
promise.then(r => console.log(r)).catch(err => console.log(err));
Любая помощь будет оценена.