首页 > 解决方案 > 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结果吗?

标签: javascriptpromisefetch

解决方案


你需要在你的 catch 中返回 Promise 以便能够从它中链接:

.catch(error => {
    counter++;
    // return Fetch next URL
    return ajax(urls[counter]);
  });

推荐阅读