我有一个带有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 );
}
}
}