multiple $.Deffered

by dsbonev

JavaScript

$.when(fetchUsers(), fetchAccounts())
    .done(printUserBalance)
    .fail(printError);

function fetchUsers() {
    return mockedAjaxRequest('/users');
}

function fetchAccounts() {
    return mockedAjaxRequest('/accounts');
}

function printUserBalance(users, accounts) {
    users.forEach(function (user, index) {
        console.log(user, 'has', accounts[index]);
    });
}

function mockedAjaxRequest(url) {
    var deferred = new $.Deferred();
    
    setTimeout(function () {
      if (isSuccessful()) {
          console.log('Successfully fetched resourse for url', url);
          deferred.resolve(mockedAjaxRequest.resources[url]);
      } else {
          deferred.reject('Failed to fetch resource for url ' + url);
      }
    }, 1000);
    
    return deferred.promise();
}

mockedAjaxRequest.resources = {
    '/users': ['Carlos Slim', 'Bill Gates'],
    '/accounts': ['$73 billion', '$67 billion'],
};

function isSuccessful() {
    return Math.random() < 0.5;
}

function printError(message) {
    console.error('Error occured', message);
}