You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让getUrl函数重复执行直到返回结果不为400错误?

实现重复执行直到返回非400结果

可以通过异步重试函数配合while循环实现需求,同时建议添加重试间隔避免频繁请求服务器:

async function getUrlWithRetry() {
  let result;
  while (true) {
    result = await getUrl();
    // 拿到非400结果就返回
    if (result !== 400) {
      return result;
    }
    // 失败后等待3秒再重试,可根据需求调整间隔
    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

// 使用示例
// getUrlWithRetry().then(data => {
//   console.log('成功获取数据:', data);
// }).catch(err => {
//   console.error('请求异常:', err);
// });

关键细节说明

  • 重试函数必须是异步的,用async/await处理getUrl的异步流程
  • while(true)会持续循环,直到获取到非400结果才终止并返回数据
  • 添加延迟是为了避免短时间内重复请求给服务器造成压力,间隔时间可按需修改

如果需要限制最大重试次数,防止无限循环,可以用下面的版本:

async function getUrlWithRetry(maxRetries = 5) {
  let result;
  let retries = 0;
  while (retries < maxRetries) {
    result = await getUrl();
    if (result !== 400) {
      return result;
    }
    retries++;
    await new Promise(resolve => setTimeout(resolve, 3000));
  }
  // 达到重试上限后抛出错误
  throw new Error('已达最大重试次数,仍未获取有效结果');
}

另外,原getUrl的catch块为空,网络错误时会返回undefined,若需要网络错误时也继续重试,可修改getUrl的错误处理:

async function getUrl() {
try {
    let res = await fetch(myURL, {
        method: 'GET',
        headers: {
            'Content-type': 'application/json; charset=UTF-8'
        }
    });
    if (res.ok) {
        return await res.json();
    } else {        
        return 400;
    }
} catch (error) {
    // 网络错误时返回400,让重试逻辑继续执行
    return 400;
}
}

内容的提问来源于stack exchange,提问作者streaming-coc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:27:03