Angularjs Q Promise/Deferred Example

Last updated:

Example

Here is an example of how to write a query component that uses AngularJs $q and returns a Promise object that is resolved asynchronously.

angular.module('query')

.factory('Query', ['$resource', '$q', 
  function($resource, $q) {
    var path = '/api/v1/queries';
    var url = path + '/:id';

    var Query = $resource(url, {id: '@id'},{
      'update':{method:'PUT'}
    });

    Query.delete = function(query) {

      // turn it into a deferred object
      var deferred = $q.defer();

      $.ajax({
        url: path,
        type: 'DELETE',
        // crossdomain: true,
        data: {id: query.id},
        xhrFields: {withCredentials: true},
        success: function(response) {
          deferred.resolve();
        },
        error: function(response) {
          deferred.reject();
        },
      });

      // you return a promise
      return deferred.promise;
    };

    return Query;

  }
]);

Dialogue & Discussion