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.

Dur
la source
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);
tomaoq
la source
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);
}
Muhammad Reda
la source
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

Rahul Tripathi
la source
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é

joseph oun
la source
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

Rue Jonas Sciangula
la source
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);
}

Nafeez Abrar
la source
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 ()" `

Jeffrey Roosendaal
la source
1
ng-click="(variable) ? doSomething() : true"fonctionnerait également
pwolaq
ng-click = "(variable)? doSomething (): ''" fonctionnerait aussi
joseph oun