Skip to content

Instantly share code, notes, and snippets.

@adamkleingit
Last active September 28, 2015 08:34
Show Gist options
  • Save adamkleingit/bcfc9cec18cc7994810c to your computer and use it in GitHub Desktop.
Save adamkleingit/bcfc9cec18cc7994810c to your computer and use it in GitHub Desktop.
example of using defer
function getAllUsers() {
let promise = $http.get('/settings')
.then((settings) => {
if(settings.defaultUsers) {
return getDefaultUsers();
}
else {
// get some more data
return $http.get('/users')
.then((users) => {
// do something else with the users
return users;
})
}
})
promise
.then(() => {
// do something else
})
.catch(() => {
})
return promise;
}
function getAllUsers() {
let deferred = $q.defer();
$http.get('/settings')
.then((settings) => {
if(settings.defaultUsers) {
deferred.resolve(getDefaultUsers());
}
else {
// get some more data
return $http.get('/users')
.then((users) => {
// do something else with the users
deferred.resolve(users);
})
}
})
.then(() => {
// do something else
})
.catch(() => {
deferred.reject();
})
return deferred.promise;
}
@benjamingr
Copy link

Opinionated no defer:

function getAllUsers() {
  let promise = $http.get('/settings').then(settings => {
      if(settings.defaultUsers) {
        return getDefaultUsers();
      }
      // get some more data
      return $http.get('/users').then((users) => {
            // do something else with the users
            return users;
      });    
  });
  // personally, I almost never "fork" promises like in the example above, but you
  // can do it here
  return promise;  
}

Opinionated proxy:

function getAllUsers() {
    let settings = $http.get("/settings");
    let settingUsers = settings.then(settings => settings.defaultUsers ? getDefaultUsers() : null);
    let users = settingUsers.then(users => users || getUsersFromHttp());
    return users;

    function getUsersFromHttp(){ 
        return $http.get(users).then(users => {
            // do processing of users and return processed, I guess
        });
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment