JS новичок ie здесь! Я пытаюсь реализовать повторную логику c, используя встроенный метод запроса https lib (я должен сделать POST). Также реализуем это в Azure Функции.
Редактировать Я изменил код, и он повторяет ошибки HTTP, но не сокет или ошибки подключения. Do c говорит, что в случае ошибок сокета, сначала будет вызвано («сокет»), а затем - («ошибка»). Но мое приложение никогда не повторяет попытки при возникновении ошибки ECONNRESET или ETIMEDOUT.
async function fetchWithRetry(options, reqBody,context) {
return new Promise((resolve, reject) => {
let attempts = 1;
const fetch_retry = (options, n) => {
let httpsReq = httpsClient.request(options, function (res) {
const code = res.statusCode;
const message = res.statusMessage;
if (n === 0) {
reject({
'status': code,
'message': message
});
} else if (code < 200 || code >= 300) {
context.log("Retry again: Got back code: " + code + " message: " + message);
context.log("With delay " + attempts * delay);
setTimeout(() => {
attempts++;
fetch_retry(options, n - 1);
}, attempts * delay);
} else if (code === 201) {
resolve({
'status': code,
'message': message
});
} else {
var body = '';
res.on('data', function (chunk) {
body = body + chunk;
});
res.on('end', function () {
resolve(JSON.parse(body));
});
}
httpsReq.on('error', function (error) {
context.log("Retry again: Got back code: " + code + " message: " + message + " error: " + error);
context.log("With delay " + attempts * delay);
setTimeout(() => {
attempts++;
fetch_retry(options, n - 1);
}, attempts * delay);
});
});
httpsReq.write(reqBody);
httpsReq.end();
};
return fetch_retry(options, numberOfRetries);
});
}
При возникновении ошибки код вызывает метод end () и моя функция умирает. Могу ли я получить помощь, чтобы исправить это. Также пытаюсь обернуть это обещание, потому что это лучшая практика.