javascript - Javascript fetch() 故障转移 URL
问题描述
我有一个 URL 数组,我想执行以下fetch()
请求:
const urls = [
'https://dewnuf111111.com/configuration',
'https://dewnuf222222.com/configuration',
'https://bcsmania.co.uk/test.json'
];
如果 fetch 发现错误(例如站点不存在、内部错误等),我希望它尝试下一个 URL,所以我添加了一个增量器。一旦它到达一个有效的 URL 并成功发出请求,它就应该简单console.log('DONE')
,但我似乎无法让它工作。
这是我到目前为止编写的代码:
const urls = [
'https://dewnuf111111.com/configuration',
'https://dewnuf222222.com/configuration',
'https://bcsmania.co.uk/test.json'
];
let obj = {a: 'test'};
let counter = 0;
function ajax(url) {
// Check for for last URL in the array
if (counter < urls.length) {
return fetch(url)
.then(response => {
// Combine objects
obj = Object.assign(obj, response.json());
console.log(urls[counter], obj);
return Promise.resolve(obj);
}).catch(error => {
counter++;
// Fetch next URL
ajax(urls[counter]);
});
}
}
function getConfigurations() {
return ajax(urls[counter]);
}
getConfigurations().then((configurations) => {
console.log('DONE', configurations);
});
这是一个JSFiddle查看预览。
任何人都可以阐明我可能出错的地方吗?我需要先制作函数async
然后再制作await
结果吗?
解决方案
你需要在你的 catch 中返回 Promise 以便能够从它中链接:
.catch(error => {
counter++;
// return Fetch next URL
return ajax(urls[counter]);
});
推荐阅读
- node.js - 如何在 Node JS 中使用 k6
- sql - 如何在 Oracle 的 WHERE 子句中使用 COUNT
- javascript - 如何在原始文本 JSON 值字符串中转义双引号以以编程方式对其进行解析?
- javascript - React - 有条件地不在表单提交中发送数据键
- shader - DXC 是否对光线跟踪着色器 HLSL 中的条件和对 TraceRay() 的调用施加限制?
- spring - @RequestHeader 的编码问题
- javascript - 更改字符串中某些单词的首字母
- python - 如何将未知数字列表值传递到输入字段
- python - 在 Python 中调用类函数
- reactjs - Antd Table Skip page:无数据