elbywan / wretch

A tiny wrapper built around fetch with an intuitive syntax. :candy:
MIT License
4.83k stars 98 forks source link

Doc example improvement: 400 should not retry #176

Open dmudro opened 1 year ago

dmudro commented 1 year ago

been using wretch for some time, nice little lib indeed.

it might be worth tweaking the retry example or defaults to ignore certain http responses that should almost never retry.

we had a case with Zoom API recently where initial POST resulted in 400 Bad Request which retried a few times and subsequently causing 429 Too Many Requests. things like 400 bad request is almost always client's fault!

maybe adding a simple check in the doc or adding a new option / default?

...
retry({
    ...
    // didn't try this yet:
    until: (response, error) => response && (response.ok || ![408, 413, 500, 502, 503, 504].includes(response.status)),
    // or a new option?
    // retryOnAnyResponse: false,
    retryOnNetworkError: false,
    resolveWithLatestResponse: false
  })
...
elbywan commented 1 year ago

Hey @dmudro 👋

been using wretch for some time, nice little lib indeed.

Thanks!

it might be worth tweaking the retry example or defaults to ignore certain http responses that should almost never retry.

You are absolutely right, this should be the default behaviour to skip retrying on 4xx errors. But until wretch v3.x.x is released (to avoid a breaking change) I just pushed a commit to clarify it in the readme and typescript doc.

EliottG-Bam commented 4 months ago

Hey, I tried digging in the lib but I'm not sure I understand correctly. The retry mechanism happens only when using the retry middleware right? If I use wretch without anything else, I should have no retry when I'm calling my function?

elbywan commented 4 months ago

The retry mechanism happens only when using the retry middleware right?

Hey, yes it is only when adding the retry middleware.