A cosa serve Angular.noop?


86

Ho provato a cercarlo ovunque anche sulla documentazione di Angular.org ma non sono riuscito a trovare alcuna spiegazione dettagliata con l'implementazione. Sarebbe estremamente utile se qualcuno potesse spiegarlo.


è solo una funzione vuota che non fa nulla
doodeec

1
Ho già tutto questo. Ma perché lo usiamo così? "successo = successo || angular.noop;"
Duro

1
sembra che @lechariotdor abbia la risposta migliore ... potresti spostare la tua accettazione in modo che i visitatori di questa pagina siano indirizzati più rapidamente alla risposta migliore
sfletche

Risposte:


148

angular.noop è una funzione vuota che può essere utilizzata come segnaposto quando è necessario passare una funzione come parametro.

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
Qual è il vantaggio di chiamare nooppiuttosto che lasciare la funzione vuota? Estetica, performance o altro?
abyrne85

4
@ abyrne85 È esteticamente più gradevole ed è una buona pratica da usare angular.nooppoiché riutilizzi sempre la stessa funzione vuota (invece di dichiarare ogni volta una nuova funzione anonima). Dal punto di vista delle prestazioni non fa differenza poiché il codice per angular.noopè solo una funzione vuota denominata noop.
tomaoq

L'uso di angular.noop crea un forte accoppiamento con l'oggetto angolare. Preferisco usare la funzione anonima in linea quando è necessario.
John Smith

Grazie mille :) Puoi spiegare cos'è $ timeout (angular.noop)?
artgb

27

Lo trovo estremamente utile quando si scrive una funzione che prevede un callback.

Esempio:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

La funzione sopra restituirà un errore, quando viene chiamata senza specificare il terzo argomento. myFunction(1, 'a');

Esempio (utilizzando 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
O avete una battuta per questo: typeof callback === 'function' && callback();. Molto più elegante ^^. Non usando angular.noopperò.
Freezystem

16

È una funzione che non esegue operazioni. Questo è utile in situazioni come questa:

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

È utile quando si scrive codice in stile funzionale


2
Ok. Capito grazie. Ma solo una piccola domanda sul perché non possiamo semplicemente fare "(y) (x)" invece di "(y || angular.noop) (x);"? Qual è il motivo dietro questo?
Duro

3
@AngularHarsh: - Puoi scriverlo. Può essere che questo esempio possa aiutare: - //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

Penso di averlo capito ora. Quindi ciò che stiamo facendo qui è displayError viene attivato in caso di errore ma non accade nulla in caso di successo (come suggerito).
Duro

5

* questa risposta presuppone che tu non sia un principiante in angolare

Angular.noop è una funzione vuota che può essere utilizzata come segnaposto in alcuni casi

per esempio:

Immagina di utilizzare q.all che esegue più chiamate all'API e restituisce una promessa. Se alcune di queste chiamate falliscono ma hai ancora bisogno di gestire quelle che non hanno fallito, usa angular noop come callback alle chiamate API quando prendi le chiamate. Se non usi il noop angolare, q.all rifiuterà tutto se una chiamata fallisce.

Q.all (somecall.catch (angular.noop), anothercall) .then (risolvere il risultato [0] e il risultato [1])

Se una chiamata fallisce, Angular lo ignorerà ed eseguirà un'altra chiamata (ma sarà ancora indefinito per il primo risultato risolto)

Spero di aver aiutato


1
Ho svalutato perché la tua risposta è così grammaticalmente e formalmente sbagliata che non sono riuscito a ottenere informazioni affidabili da essa.
Edoardoo

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

È il modo più breve per farlo

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

Tenendo conto che callback var sarà una funzione


questo è elegante
Faiz Mohamed Haneef

2

Se vuoi la documentazione ufficiale ecco il link . È piuttosto semplice. Ho anche incollato la documentazione corrente dal collegamento.


Una funzione che non esegue operazioni. Questa funzione può essere utile quando si scrive codice in stile funzionale.

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


0

Trucco: puoi anche usarlo per aggiungere un ternario a un ng-clickattributo:

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

Fino a quando non ho scoperto che potresti usare ng-click = "variable && doSomething ()" "


1
ng-click="(variable) ? doSomething() : true"funzionerebbe anche
pwolaq

ng-click = "(variable)? doSomething (): ''" funzionerebbe anche
joseph oun
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.