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);
  },
)