¿Para qué se utiliza Angular.noop?

86

Intenté buscarlo en todas partes, incluso en la documentación de Angular.org , pero no pude encontrar ninguna explicación detallada con la implementación. Sería de gran ayuda si alguien pudiera explicarlo.

Duro
fuente
es solo una función vacía que no hace nada
doodeec
1
Eso ya lo tengo. Pero, ¿por qué lo usamos así? "éxito = éxito || angular.noop;"
Duro
1
parece que @lechariotdor tiene la mejor respuesta ... puede mover su aceptación para que los visitantes de esta página sean dirigidos más rápidamente a la mejor respuesta
sfletche

Respuestas:

148

angular.noop es una función vacía que puede usarse como marcador de posición cuando necesita pasar alguna función como parámetro.

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
fuente
1
¿Cuál es el beneficio de llamar en nooplugar de simplemente dejar la función en blanco? ¿Estética, rendimiento o algo más?
abyrne85
4
@ abyrne85 Es más agradable desde el punto de vista estético y es una buena práctica usarlo, angular.noopya que siempre reutiliza la misma función vacía (en lugar de declarar una nueva función anónima cada vez). En cuanto al rendimiento, no hace ninguna diferencia, ya que el código para angular.noopes solo una función vacía nombrada noop.
Tomaoq
El uso de angular.noop crea un fuerte acoplamiento con el objeto angular. Prefiero usar la función anónima en línea cuando sea necesario.
John Smith
Muchas gracias :) ¿Puedes explicar qué es $ timeout (angular.noop)?
artgb
27

Lo encuentro extremadamente útil al escribir una función que espera una devolución de llamada.

Ejemplo:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

La función anterior devolverá un error cuando se llame sin especificar el tercer argumento. myFunction(1, 'a');

Ejemplo (usando 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
fuente
4
O usted tiene una sola línea para que: typeof callback === 'function' && callback();. Mucho más elegante ^^. Sin angular.noopembargo, no lo estoy usando .
Freezystem
16

Es una función que no realiza operaciones. Esto es útil en situaciones como esta:

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

Es útil cuando se escribe código en estilo funcional.

Rahul Tripathi
fuente
2
Okay. Gracias. Pero solo una pequeña pregunta de que ¿por qué no podemos simplemente hacer "(y) (x)" en lugar de "(y || angular.noop) (x);"? Cuál es la razón detrás de esto?
Duro
3
@AngularHarsh: - Puedes escribir eso. Puede que este ejemplo ayude: - //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 ("chico malo, listContacts falló ");});
Rahul Tripathi
Creo que lo tengo ahora. Entonces, lo que estamos haciendo aquí es displayError se activa en caso de falla, pero no sucede nada en caso de éxito (como se sugiere).
Duro
5

* esta respuesta asume que no eres un principiante en angular

Angular.noop es una función vacía que se puede usar como marcador de posición en algunos casos

por ejemplo:

Imagina que estás usando q.all, que hace varias llamadas a la API y devuelve una promesa. Si algunas de estas llamadas fallan, pero aún necesita manejar las que no fallaron, use angular noop como devolución de llamada a las llamadas de la API cuando las reciba. Si no usa el noop angular, q.all rechazará todo si falla una llamada.

Q.all (somecall.catch (angular.noop), anothercall). Then (resuelve el resultado [0] y el resultado [1])

Si una llamada falla, Angular lo ignorará y realizará otra llamada (pero aún estará indefinido para el primer resultado resuelto)

Espero haber ayudado

joseph oun
fuente
1
He votado en contra porque tu respuesta es tan gramática y formalmente incorrecta que no pude obtener ninguna información confiable de ella.
Edoardoo
4
var result = (callback || angular.noop)(params)

Es la forma más corta de hacerlo

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

Teniendo en cuenta que la var de devolución de llamada será una función

Calle Jonas Sciangula
fuente
esto es elegante
Faiz Mohamed Haneef
2

Si quieres documentación oficial aquí está el enlace . Es bastante simple. También pegué la documentación actual del enlace.


Una función que no realiza operaciones. Esta función puede resultar útil al escribir código en estilo funcional.

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

Nafeez Abrar
fuente
0

Truco: también puede usarlo para agregar un ternario a un ng-clickatributo:

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

Hasta que descubrí que podía usar ng-click = "variable && doSomething ()" `

Jeffrey Roosendaal
fuente
1
ng-click="(variable) ? doSomething() : true"también funcionaría
pwolaq
ng-click = "(variable)? doSomething (): ''" también funcionaría
joseph oun