86

I have tried searching it everywhere even on Angular.org documentation but couldn't find any detailed explanation with implementation. It would be hugely helpful if any could explain it.

Samurai Jack
  • 2,985
  • 8
  • 35
  • 58
Harsh
  • 1,665
  • 1
  • 10
  • 16
  • it's just an empty function that does nothing – doodeec Mar 12 '14 at 10:16
  • 1
    That much I got already. But why do we use it like this? "success = success || angular.noop;" – Harsh Mar 12 '14 at 10:18
  • 1
    looks like @lechariotdor has got the better answer...you might move your acceptance so visitors to this page are more quickly directed to the best answer – sfletche Jan 17 '16 at 07:19

7 Answers7

151

angular.noop is an empty function that can be used as a placeholder when you need to pass some function as a param.

function foo (callback) {
    // Do a lot of complex things

    callback();
}

// Those two have the same effect, but the later is more elegant
foo(function() {});
foo(angular.noop);
tomaoq
  • 3,028
  • 2
  • 18
  • 25
  • 1
    What's the benefit of calling `noop` rather than just leaving the function blank? Aesthetics, performance or something else? – abyrne85 Aug 24 '15 at 11:42
  • 5
    @abyrne85 It is more aesthetically pleasing and a good practice to use `angular.noop` as you always reuse the same empty function (instead of declaring a new anonymous function everytime). Performance-wise it makes no difference as the code for `angular.noop` is just an empty function named `noop`. – tomaoq Sep 01 '15 at 08:28
  • Using angular.noop creates a strong coupling with angular object. I do prefer using inline anonymous function when is necessary. – John Smith Dec 18 '16 at 13:00
  • Great thanks :) Can you explain what is $timeout(angular.noop)? – artgb Aug 23 '17 at 09:54
27

I find it extremely helpful when writing a function that expects a callback.

Example:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

The function above will return an error, when it gets called without specifying the third argument. myFunction(1, 'a');

Example (using angular.noop):

function myFunction(id, value, callback) {

    var cb = callback || angular.noop; // if no `callback` provided, don't break :)
    // some logic
    return cb(someData);
}
Muhammad Reda
  • 26,379
  • 14
  • 93
  • 105
  • 4
    Or you have a one-liner for that : `typeof callback === 'function' && callback();`. Way more classy ^^. Not using `angular.noop` though. – Freezystem May 18 '16 at 12:32
16

It is a function that performs no operations. This is useful in situation like this:

function foo(y) {
   var x= fn();
   (y|| angular.noop)(x);
 }

It is useful when writing code in the functional style

Rahul Tripathi
  • 168,305
  • 31
  • 280
  • 331
  • 2
    Ok. Got it thanks. But just a little query that why can't we simply do "(y)(x)" instead of "(y|| angular.noop)(x);"? What is the reason behind this? – Harsh Mar 12 '14 at 10:25
  • 3
    @AngularHarsh:- You may write that. May be this example will help:- `//do nothing on the success callback, hence replacing the success callbck function with angular.noop()` $scope.contacts= Contacts.query( angular.noop,function(response) { Window.myresp = response; $scope.displayError(response); console.log("bad boy, listContacts failed"); }); – Rahul Tripathi Mar 12 '14 at 10:28
  • I think I got it now. So what we are doing here is displayError is triggered on failure but nothing happens on success(as suggested). – Harsh Mar 12 '14 at 10:33
5

*this answer assumes that u are not a beginner in angular

Angular.noop is an empty function that can be used as placeholder in some cases

for example:

Imagine you are using q.all which do multiple calls to the api and return one promise. If some of these calls fail but u still need to handle the ones that didnt fail, use angular noop as a callback to the api calls when u catch the calls. If u dont use angular noop, q.all will reject everthing if one call fails.

Q.all( somecall.catch(angular.noop), anothercall).then( resolve result[0] and result[1])

If a call fails, Angular will ignore that and perform another call (but u will still will undefined for the first resolved result)

I Hope that I helped

joseph oun
  • 135
  • 1
  • 7
  • 1
    I downvoted because your answer is so grammatically and formally wrong I couldn't actually get any reliable information from it. – Edoardoo Feb 15 '17 at 11:14
4
var result = (callback || angular.noop)(params)

Its a shortest way to do

var result = typeof callback === 'function' && callback(params);

Taking into account that callback var will be a function

2

If you want official documentation here is the link. It is pretty simple. I have also pasted the current documentation from link.


A function that performs no operations. This function can be useful when writing code in the functional style.

function foo(callback) {
  var result = calculateResult();
  (callback || angular.noop)(result);
}

Nafeez Abrar
  • 1,045
  • 10
  • 27
0

Trick: You can also use it to add a ternary to an ng-click attribute:

ng-click="(variable) ? doSomething() : angular.noop()"

Until I found out you could use ng-click="variable && doSomething()"`

Jeffrey Roosendaal
  • 6,872
  • 8
  • 37
  • 55