Great article!. I have to point that it wasn't required the creation of the promise at first, because fetch already returns a Promise. You could go even further:
const fetch_retry = (url, options, n) => fetch(url, options).catch(error => n===1? Promise.reject(error) : fetch_retry(url, options, n-1));