我有一个带有URL的数组,我必须遍历它才能下载HTML文件。如果某个URL无法加载(例如由于连接问题),则该HTML文件将不会下载,因为循环将转到下一个迭代。我的目标是,如果发生错误,程序应将当前迭代重复3次,然后转到下一个迭代。

这是我想要实现的目标:

let filteredUrls = [ 'url1', 'url2', 'url3'];
for (let id in filteredUrls) {
  let currentUrl = filteredUrls[id];
    try {
      //open currentUrl, do some stuff...
    } catch (error) {
      //if there's an error, repeat the current loop 3 times,
      //after that, move to the next iteration
    }
}


我怎样才能做到这一点?有办法吗?

最佳答案

如果您的下载代码是异步的,则您可能需要使用递归函数,而不是仅再次重复循环。

let filteredUrls = [ 'url1', 'url2', 'url3'];
for (let id in filteredUrls) {
  let currentUrl = filteredUrls[id];
  downloadFile( currentUrl, 0 );
}

function downloadFile( url, tryCount ) {
  try {
    //open currentUrl, do some stuff...
  } catch (error) {
    tryCount++;
    if ( tryCount < 3 ) {
      downloadFile( url, tryCount );
    }
  }
}

07-28 04:03