Wofür wird Angular.noop verwendet?

86

Ich habe versucht, es überall zu durchsuchen, sogar in der Angular.org- Dokumentation, konnte aber bei der Implementierung keine detaillierte Erklärung finden. Es wäre sehr hilfreich, wenn jemand es erklären könnte.

Hart
quelle
Es ist nur eine leere Funktion, die nichts tut
doodeec
1
So viel habe ich schon bekommen. Aber warum benutzen wir es so? "Erfolg = Erfolg || angle.noop;"
Harter
1
Es sieht so aus, als hätte @lechariotdor die bessere Antwort ... Sie könnten Ihre Akzeptanz verschieben, damit Besucher dieser Seite schneller zur besten Antwort geleitet werden
sfletche

Antworten:

148

angle.noop ist eine leere Funktion, die als Platzhalter verwendet werden kann, wenn Sie eine Funktion als Parameter übergeben müssen.

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
quelle
1
Was bringt es, aufzurufen, noopanstatt nur die Funktion leer zu lassen? Ästhetik, Leistung oder etwas anderes?
Abyrne85
4
@ abyrne85 Es ist ästhetischer und eine gute Vorgehensweise, angular.noopda Sie immer dieselbe leere Funktion wiederverwenden (anstatt jedes Mal eine neue anonyme Funktion zu deklarieren). In Bezug auf die Leistung macht es keinen Unterschied, da der Code für angular.noopnur eine leere Funktion mit dem Namen ist noop.
Tomoq
Die Verwendung von angle.noop erzeugt eine starke Kopplung mit dem eckigen Objekt. Ich bevorzuge die Verwendung einer anonymen Inline-Funktion, wenn dies erforderlich ist.
John Smith
Vielen Dank :) Können Sie erklären, was $ timeout (angle.noop) ist?
Artgb
28

Ich finde es äußerst hilfreich, wenn ich eine Funktion schreibe, die einen Rückruf erwartet.

Beispiel:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Die obige Funktion gibt einen Fehler zurück, wenn sie aufgerufen wird, ohne das dritte Argument anzugeben. myFunction(1, 'a');

Beispiel (mit 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
quelle
4
Oder Sie haben einen Einzeiler dafür : typeof callback === 'function' && callback();. Viel edler ^^. Nicht verwenden angular.noop.
Freezystem
16

Es ist eine Funktion, die keine Operationen ausführt. Dies ist in folgenden Situationen nützlich:

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

Dies ist nützlich, wenn Sie Code im funktionalen Stil schreiben

Rahul Tripathi
quelle
2
OK. Habe ich, danke. Aber nur eine kleine Frage, warum können wir nicht einfach "(y) (x)" anstelle von "(y || angle.noop) (x);" machen? Was ist der Grund dafür?
Harter
3
@ AngularHarsh: - Das kannst du schreiben. //do nothing on the success callback, hence replacing the success callbck function with angular.noop() Möglicherweise hilft dieses Beispiel: - $ scope.contacts = Contacts.query (angle.noop, Funktion (Antwort) {Window.myresp = Antwort; $ scope.displayError (Antwort); console.log ("böser Junge, listContacts fehlgeschlagen ");});
Rahul Tripathi
Ich glaube, ich habe es jetzt verstanden. Wir tun hier also, dass displayError bei einem Fehler ausgelöst wird, aber bei Erfolg nichts passiert (wie vorgeschlagen).
Harsh
5

* Diese Antwort setzt voraus, dass Sie kein Anfänger im Winkel sind

Angular.noop ist eine leere Funktion, die in einigen Fällen als Platzhalter verwendet werden kann

beispielsweise:

Stellen Sie sich vor, Sie verwenden q.all, die mehrere Anrufe an die API tätigen und ein Versprechen zurückgeben. Wenn einige dieser Anrufe fehlschlagen, Sie aber immer noch diejenigen behandeln müssen, die nicht fehlgeschlagen sind, verwenden Sie Angular Noop als Rückruf für die API-Anrufe, wenn Sie die Anrufe abfangen. Wenn Sie kein eckiges Noop verwenden, lehnt q.all alles ab, wenn ein Anruf fehlschlägt.

Q.all (somecall.catch (angle.noop), anothercall) .then (Ergebnis [0] und Ergebnis [1] auflösen)

Wenn ein Anruf fehlschlägt, ignoriert Angular dies und führt einen weiteren Anruf durch (aber Sie werden für das erste aufgelöste Ergebnis immer noch undefiniert sein).

Ich hoffe, dass ich geholfen habe

Joseph Unze
quelle
1
Ich habe abgelehnt, weil Ihre Antwort so grammatikalisch und formal falsch ist, dass ich keine verlässlichen Informationen daraus erhalten konnte.
Edoardoo
4
var result = (callback || angular.noop)(params)

Es ist der kürzeste Weg

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

Unter Berücksichtigung, dass Rückruf var eine Funktion sein wird

Jonas Sciangula Street
quelle
das ist elegant
Faiz Mohamed Haneef
2

Wenn Sie offizielle Dokumentation wünschen, ist hier der Link . Es ist ziemlich einfach. Ich habe auch die aktuelle Dokumentation von Link eingefügt.


Eine Funktion, die keine Operationen ausführt. Diese Funktion kann nützlich sein, wenn Sie Code im Funktionsstil schreiben.

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

Nafeez Abrar
quelle
0

Trick: Sie können es auch verwenden, um einem ng-clickAttribut einen Ternär hinzuzufügen :

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

Bis ich herausgefunden habe, dass Sie ng-click = "variable && doSomething ()" `verwenden können

Jeffrey Roosendaal
quelle
1
ng-click="(variable) ? doSomething() : true"würde auch funktionieren
pwolaq
ng-click = "(Variable)? doSomething (): ''" würde auch funktionieren
joseph oun