实现一个支持请求失败后重试的JS方法

假设存在一个函数,返回promise对象。它可能会失败。

// 伪代码
function asyncFunc(){
    return new Promise((resolve,reject)=>{
        axios.get('http://sdadasdadadasdas.com').then((res)=>{
            resolve(res)
        }).catch((err)=>{
           reject(err)
        })
    })
}

包装上面的函数支持重试。

// 支持重试的函数
function reTry(asyncFunc,times) {    //times是重试次数
    return new Promise(async (resolve, reject) => {
        function reTryFunc(times) {
            console.log(`第${times}次重试`)
            asyncFunc().then((res) => {
                    resolve(res)
            }).catch((err) => {
                if (times > 0) {
                    console.log(`----第${times}次重试`)
                    setTimeout(() => {
                        reTryFunc(times - 1)
                    })
                } else {
                    reject(err)
                }
            })
        }
        reTryFunc(times)
    })
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端实现同一个文件上传失败新上传,可以使用以下步骤: 1. 创建一个input元素用于文件选择: ```html <input type="file" id="fileInput" /> ``` 2. 监听文件选择的change事件,并获取选择的文件: ```javascript const fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', handleFileSelect); function handleFileSelect(event) { const file = event.target.files[0]; uploadFile(file); } ``` 3. 定义上传文件的函数uploadFile,并在上传失败新调用该函数: ```javascript function uploadFile(file) { const formData = new FormData(); formData.append('file', file); // 发起文件上传请求,使用fetch或者axios等库 // 这里只是示例,具体的请求方式和接口根据实际情况进行调整 fetch('/upload', { method: 'POST', body: formData, }) .then(response => { if (response.ok) { // 文件上传成功 console.log('上传成功'); } else { // 文件上传失败新上传 console.log('上传失败新上传'); uploadFile(file); } }) .catch(error => { // 请求出错,新上传 console.error('请求出错,新上传', error); uploadFile(file); }); } ``` 在uploadFile函数中,首先将文件创建为FormData对象,并使用fetch或者axios等库发送文件上传请求。如果请求返回成功,则表示文件上传成功。如果请求返回失败或者出错,则新调用uploadFile函数进行新上传。 这样,当文件上传失败或者请求出错时,会自动新上传文件。请注意,为了避免无限循环复上传,可能需要添加一些上传失败的判断条件,例如最大次数或者延迟等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值