sequential execution
by Artem
JavaScript
'use strict';
function downloadAsync(url, onsuccess, onfailure) {
setTimeout(() => {
// onfailure();
onsuccess(`data ${url}`);
}, 1000);
}
function downloadOneAsync(urls, onsuccess, onfailure) {
var n = urls.length;
function tryNextURL(i) {
if (i >= n) {
onfailure('there is no successful downloads');
return;
}
downloadAsync(urls[i], onsuccess, function() {
tryNextURL(i + 1);
});
}
tryNextURL(0);
}
downloadOneAsync(
['url1', 'url2'],
function(data) {
console.log('success: ', data);
},
function(data) {
console.log('error: ', data);
},
)