angular $http / jquery complete equivalent

Renaud picture Renaud · Aug 9, 2013 · Viewed 7k times · Source

Is there a way to emulate jquery 'complete' callback with angular $http module? I have some code I would like to execute no matter whether the request succeeded or failed and at the moment I find myself having to write this:

$http.get(someUrl).success(function(){
        successCode();
        completeCode();
    }).error(function(){
        errorCode();
        completeCode();
    })

but I would rather write something like:

$http.get(someUrl).success(function(){
        successCode();
    }).error(function(){
        errorCode();
    }).complete(function(){
        completeCode();
    })

I've tried also using the promise API but I end up having the same problem. Any suggestion?

Answer

Benjamin Gruenbaum picture Benjamin Gruenbaum · Aug 9, 2013

Update Aug 2014: .always has been renamed .finally in recent versions of Angular. Prefer .finally to .always.

Note that in order to support IE8 you have to call it with bracket notation as ["finally"].


You can use .always in AngularJS

This change is rather new (you could do that in jQuery for a while), you can see the commit here. This requires you to have AngularJS 1.1.5 or higher.

always(callback) – allows you to observe either the fulfillment or rejection of a promise, but to do so without modifying the final value. This is useful to release resources or do some clean-up that needs to be done whether the promise was rejected or resolved. See the full specification for more information.

Fiddle