微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重试多次提取

如何解决重试多次提取

如果失败,我该如何重试 x 次获取

代码基于这篇文章https://dmitripavlutin.com/javascript-fetch-async-await/

async function fetchData() {
  const [firstResponse,secondResponse] = await Promise.all([
    fetch(firstUrl),fetch(secondUrl),]);

  const first = await firstResponse.json();
  const second = await secondResponse.json();

  return [first,second];
}

fetchData()
  .then(([first,second]) => {
    console.log("success");
  })

  .catch((error) => {
    console.log("error");
  });

解决方法

由于请求是相互独立的,所以我有一个实用函数可以重试 X 次,然后在 Promise.all 中使用它。我还有一个用于获取 JSON 的实用程序函数,该函数处理 fetch API 脚踏枪,它不检查 HTTP 成功(请参阅 my blog post here)。所以大致上是这样的:

// Fetch JSON
function fetchJSON(...args) {
    const response = await fetch(...args);
    if (!response.ok) {
        throw new Error(`HTTP error ${response.status}`);
    }
    return response.json();
}

// Fetch JSON with up to `retries` retries
async fetchJSONWithRetry(retries,...args) {
    while (retries > 0) {
        try {
            const result = await fetchJSON(...args);
            return result;
        } catch (e) {
            if (--retries === 0) {
                throw e;
            }
        }
    }
}

// Your `fetchData`
async function fetchData(retries = 5) {
    const [first,second] = await Promise.all([
        fetchJSONWithRetry(retries,firstUrl),fetchJSONWithRetry(retries,secondUrl),]);
  
    return [first,second];
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。