如何解决重试多次提取
如果失败,我该如何重试 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 举报,一经查实,本站将立刻删除。