Javascript 获取重试请求(失败时)

Javascript 获取重试请求(失败时),javascript,fetch-api,polyfills,Javascript,Fetch Api,Polyfills,我正在使用浏览器的本机进行网络请求。此外,我还将polyfill用于不受支持的浏览器 但是,如果请求失败,我需要重试。现在我找到了这个npm包,但他们没有在文档中解释如何使用它。有人能帮我解决这个问题或给我建议一个替代方案吗?从获取文档: fetch('/users') .then(checkStatus) .then(parseJSON) .then(function(data) { console.log('succeeded', data)

我正在使用浏览器的本机进行网络请求。此外,我还将polyfill用于不受支持的浏览器

但是,如果请求失败,我需要重试。现在我找到了这个npm包,但他们没有在文档中解释如何使用它。有人能帮我解决这个问题或给我建议一个替代方案吗?

从获取文档:

fetch('/users')
    .then(checkStatus)
    .then(parseJSON)
    .then(function(data) {
          console.log('succeeded', data)
    }).catch(function(error) {
          console.log('request failed', error)
    })
看到那个陷阱了吗?将在提取失败时触发,您可以在那里再次提取。 请看一下API

实施示例:

功能等待(延迟){
返回新承诺((resolve)=>setTimeout(resolve,delay));
}
函数fetchRetry(url、延迟、尝试、fetchOptions={}){
函数ONERR(错误){
triesLeft=tries-1;
如果(!triesLeft){
犯错误;
}
返回wait(delay),然后(()=>fetchRetry(url,delay,triesLeft,fetchOptions));
}
返回fetch(url,fetchOptions).catch(onError);
}
编辑1:,p重试是一个不错的选择


编辑2:简化的示例代码。

例如,我建议使用一些库进行承诺重试

例如:

const pRetry=require('p-retry')
const fetch=require('node-fetch')
异步函数fetchPage(){
const response=等待获取('https://stackoverflow.com')
//如果资源不存在,则中止重试
如果(response.status==404){
抛出新的pRetry.abortorror(response.statusText)
}
返回response.blob()
}
;(异步()=>{
log(等待pRetry(fetchPage,{retries:5}))
})()

这正是我目前正在做的事情。但是我正在寻找一个额外的可选{retry:3,//最大重试次数retryTimeout:3000//连续请求之间的超时}我刚刚用我认为应该是工作版本的东西更新了这个示例,您可能需要一些调整。请告诉我你是否想在代码中添加一些注释以使其更清晰。这是坦斯克指出@BenjaminGruenbaum代码非常混乱。这是否回答了你的问题?