У меня есть функция, которая возвращает обещание javascript, и внутри нее выполняется некоторый асинхронный код. Асинхронный код необходимо повторить пару раз в случае сбоя. Я делал это, пока не заметил странное поведение, которое заставило меня задуматься, правильно ли я это делаю. Так что мне пришлось изменить его. Оба подхода обрезаны здесь. У меня есть некоторое представление о том, почему первый подход (asyncFunc) не работает, и я был бы признателен, если бы кто-нибудь поделился технической ясностью по этому поводу. А для второго подхода (ayncFunc_newer) есть предложения, как это можно сделать лучше?
var _retryCount = 0;
// this is what I was doing
function asyncFunc () {
return new Promise(function(fulfill, reject) {
doAsync()
.then(fulfill)
.catch(retry);
function retry(promiseResult) {
if(_retryCount < 3) {
_retryCount++;
return asyncFunc();
}
else {
reject(promiseResult);
}
}
});
}
// this what I'm doing now
function ayncFunc_newer() {
return new Promise(function(fulfill, reject) {
var retryCount = 0;
doAsync()
.then(fulfill)
.catch(onReject);
function onReject(bmAuthError) {
if(retryCount < 3) {
retryCount++;
logWarning(error);
doAsync()
.then(fulfill)
.catch(onReject);
}
else {
fulfill(false);
}
}
});
};