Dans quel cas Angular.noop est -il utilisé?


86

J'ai essayé de le rechercher partout, même sur la documentation Angular.org , mais je n'ai trouvé aucune explication détaillée avec la mise en œuvre. Il serait extrêmement utile que quelqu'un puisse l'expliquer.


c'est juste une fonction vide qui ne fait rien
doodeec

1
C'est beaucoup que j'ai déjà. Mais pourquoi l'utilisons-nous comme ça? "succès = succès || angular.noop;"
Rude

1
on dirait que @lechariotdor a obtenu la meilleure réponse ... vous pourriez déplacer votre acceptation afin que les visiteurs de cette page soient plus rapidement dirigés vers la meilleure réponse
sfletche

Réponses:


148

angular.noop est une fonction vide qui peut être utilisée comme espace réservé lorsque vous devez passer une fonction en tant que paramètre.

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);

1
Quel est l'avantage d'appeler noopplutôt que de laisser la fonction vide? Esthétique, performance ou autre chose?
abyrne85

4
@ abyrne85 C'est plus esthétique et une bonne pratique à utiliser angular.noopcar vous réutilisez toujours la même fonction vide (au lieu de déclarer une nouvelle fonction anonyme à chaque fois). En termes de performances, cela ne fait aucune différence car le code angular.noopn'est qu'une fonction vide nommée noop.
tomaoq du

L'utilisation d'angular.noop crée un couplage fort avec un objet angulaire. Je préfère utiliser la fonction anonyme en ligne lorsque cela est nécessaire.
John Smith

Grand merci :) Pouvez-vous expliquer ce qu'est $ timeout (angular.noop)?
artgb

27

Je trouve cela extrêmement utile lors de l'écriture d'une fonction qui attend un rappel.

Exemple:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

La fonction ci-dessus renverra une erreur lorsqu'elle sera appelée sans spécifier le troisième argument. myFunction(1, 'a');

Exemple (en utilisant angular.noop):

function myFunction(id, value, callback) {

    var cb = callback || angular.noop; // if no `callback` provided, don't break :)
    // some logic
    return cb(someData);
}

4
Ou vous avez une seule ligne pour que: typeof callback === 'function' && callback();. Beaucoup plus chic ^^. Ne pas utiliser angular.noopcependant.
Freezystem

16

C'est une fonction qui n'effectue aucune opération. Ceci est utile dans une situation comme celle-ci:

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

C'est utile lors de l'écriture de code dans le style fonctionnel


2
D'accord. Je l'ai Merci. Mais juste une petite requête qui explique pourquoi ne pouvons-nous pas simplement faire "(y) (x)" au lieu de "(y || angular.noop) (x);"? Quelle est la raison derrière cela?
Rude

3
@AngularHarsh: - Vous pouvez écrire ça. Cet exemple peut aider: - //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

Je pense que je l'ai maintenant. Donc, ce que nous faisons ici, c'est que displayError est déclenché en cas d'échec mais rien ne se passe en cas de succès (comme suggéré).
Rude

5

* cette réponse suppose que vous n'êtes pas un débutant en angulaire

Angular.noop est une fonction vide qui peut être utilisée comme espace réservé dans certains cas

par exemple:

Imaginez que vous utilisez q.all qui effectue plusieurs appels à l'API et renvoie une promesse. Si certains de ces appels échouent mais que vous devez toujours gérer ceux qui n'ont pas échoué, utilisez noop angulaire comme rappel des appels API lorsque vous interceptez les appels. Si vous n'utilisez pas de noop angulaire, q.all rejettera tout si un appel échoue.

Q.all (somecall.catch (angular.noop), anothercall) .then (résoudre le résultat [0] et le résultat [1])

Si un appel échoue, Angular l'ignorera et effectuera un autre appel (mais vous restera indéfini pour le premier résultat résolu)

J'espère que j'ai aidé


1
J'ai voté contre parce que votre réponse est si grammaticalement et formellement fausse que je n'ai pas pu en tirer d'informations fiables.
Edoardoo

4
var result = (callback || angular.noop)(params)

C'est le moyen le plus court de faire

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

Prendre en compte que le callback var sera une fonction


c'est élégant
Faiz Mohamed Haneef

2

Si vous voulez une documentation officielle, voici le lien . C'est assez simple. J'ai également collé la documentation actuelle à partir du lien.


Une fonction qui n'effectue aucune opération. Cette fonction peut être utile lors de l'écriture de code dans le style fonctionnel.

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


0

Astuce: vous pouvez également l'utiliser pour ajouter un ternaire à un ng-clickattribut:

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

Jusqu'à ce que je sache que vous pouvez utiliser ng-click = "variable && doSomething ()" `


1
ng-click="(variable) ? doSomething() : true"fonctionnerait également
pwolaq

ng-click = "(variable)? doSomething (): ''" fonctionnerait aussi
joseph oun
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.