Skip to content

Commit c5a2d24

Browse files
author
Brendan Robert
committed
Edge case fix: if last response was an error that was thrown, then also reply the result of rejecting with that error.
1 parent 8635a49 commit c5a2d24

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

index.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ module.exports = async function (url, options) {
166166

167167
return new Promise(function (resolve, reject) {
168168
const wrappedFetch = async () => {
169-
let response;
169+
let processLastResult = ()=>{};
170170
while (!isResponseTimedOut(retryOptions)) {
171171
++attempt;
172172

@@ -179,7 +179,8 @@ module.exports = async function (url, options) {
179179

180180
try {
181181
// console.log(`Fetching ${url} attempt ${attempt}`);
182-
response = await fetch(url, options);
182+
const response = await fetch(url, options);
183+
processLastResult = ()=>resolve(response);
183184

184185
if (shouldRetry(retryOptions, null, response)) {
185186
console.error(`Retrying in ${retryOptions.retryInitialDelay} milliseconds, attempt ${attempt} failed (status ${response.status}): ${response.statusText}`);
@@ -189,15 +190,15 @@ module.exports = async function (url, options) {
189190
return resolve(response);
190191
}
191192
} catch (error) {
192-
response = {status: error.code || 500, statusMessage : error.message || "Unknown server error"};
193+
processLastResult = ()=>reject(error);
194+
const response = {status: error.code || 500, statusMessage : error.message || "Unknown server error"};
193195
if (!shouldRetry(retryOptions, error, response)) {
194196
if (error.name === 'AbortError') {
195197
return reject(new FetchError(`network timeout at ${url}`, 'request-timeout'));
196198
} else {
197199
return reject(error);
198200
}
199201
}
200-
201202
console.error(`Retrying in ${retryOptions.retryInitialDelay} milliseconds, attempt ${attempt} error: ${error.message}`);
202203
} finally {
203204
clearTimeout(timeoutHandler);
@@ -207,7 +208,7 @@ module.exports = async function (url, options) {
207208
const waitTime = getRetryDelay(retryOptions);
208209
if (getTimeRemaining(retryOptions) < waitTime) {
209210
console.error(`Timeout during retry delay, returning last received response`);
210-
resolve(response);
211+
processLastResult();
211212
break;
212213
} else if (waitTime > 0) {
213214
await new Promise(resolve => setTimeout(resolve, waitTime));

0 commit comments

Comments
 (0)