W jakim celu stosuje się Angular.noop?

86

Próbowałem przeszukać go wszędzie, nawet w dokumentacji Angular.org, ale nie mogłem znaleźć żadnego szczegółowego wyjaśnienia dotyczącego implementacji. Byłoby niezwykle pomocne, gdyby ktoś mógł to wyjaśnić.

Szorstki
źródło
to tylko pusta funkcja, która nic nie robi
doodeec
1
Tyle już mam. Ale dlaczego używamy tego w ten sposób? "sukces = sukces || kątowy.noop;"
Ciężki
1
wygląda na to, że @lechariotdor ma lepszą odpowiedź ... możesz przenieść swoją akceptację, aby odwiedzający tę stronę byli szybciej kierowani do najlepszej odpowiedzi
sfletche

Odpowiedzi:

148

angular.noop to pusta funkcja, której można użyć jako symbolu zastępczego, gdy trzeba przekazać jakąś funkcję jako parametr.

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
źródło
1
Jaka jest korzyść z dzwonienia noopzamiast pozostawienia pustej funkcji? Estetyka, wykonanie czy coś innego?
abyrne85
4
@ abyrne85 Jest to bardziej estetyczne i jest dobrą praktyką w użyciu, angular.noopponieważ zawsze używasz ponownie tej samej pustej funkcji (zamiast deklarować za każdym razem nową funkcję anonimową). Pod względem wydajności nie ma to znaczenia, ponieważ kod dla angular.noopjest po prostu pustą funkcją o nazwie noop.
tomaoq
Używanie angular.noop tworzy silne połączenie z kątowym przedmiotem. Wolę używać wbudowanej funkcji anonimowej, gdy jest to konieczne.
John Smith
Wielkie dzięki :) Czy możesz wyjaśnić, co to jest $ timeout (angular.noop)?
artgb
27

Uważam, że jest to niezwykle pomocne podczas pisania funkcji, która oczekuje wywołania zwrotnego.

Przykład:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Powyższa funkcja zwróci błąd, jeśli zostanie wywołana bez podania trzeciego argumentu. myFunction(1, 'a');

Przykład (użycie 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
źródło
4
Albo masz jedno-liner na to: typeof callback === 'function' && callback();. O wiele bardziej elegancki ^^. Nie używam angular.noopjednak.
Freezystem
16

Jest to funkcja, która nie wykonuje żadnych operacji. Jest to przydatne w takiej sytuacji:

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

Przydaje się przy pisaniu kodu w stylu funkcjonalnym

Rahul Tripathi
źródło
2
Ok. Mam to, dzieki. Ale tylko małe zapytanie, dlaczego nie możemy po prostu zrobić „(y) (x)” zamiast „(y || angular.noop) (x);”? Jaki jest tego powód?
Ostry
3
@AngularHarsh: - Możesz to napisać. Może ten przykład pomoże: - //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 ("zły chłopak, listContacts failed ");});
Rahul Tripathi
Myślę, że teraz to rozumiem. Więc to, co tutaj robimy, to displayError jest wyzwalany w przypadku niepowodzenia, ale nic się nie dzieje w przypadku sukcesu (jak sugerowano).
Ostry
5

* ta odpowiedź zakłada, że ​​nie jesteś początkującym w kątowym

Angular.noop to pusta funkcja, której w niektórych przypadkach można używać jako symbolu zastępczego

na przykład:

Wyobraź sobie, że używasz q.all, który wykonuje wiele wywołań interfejsu API i zwraca jedną obietnicę. Jeśli niektóre z tych wywołań zawodzą, ale nadal musisz obsłużyć te, które się nie powiodły, użyj angular noop jako wywołania zwrotnego do wywołań interfejsu API, gdy przechwytujesz wywołania. Jeśli nie używasz angular noop, q.all odrzuci wszystko, jeśli jedno połączenie się nie powiedzie.

Q.all (somecall.catch (angular.noop), anothercall). Then (rozwiązać wynik [0] i wynik [1])

Jeśli połączenie się nie powiedzie, Angular zignoruje to i wykona kolejne wywołanie (ale nadal będzie niezdefiniowane dla pierwszego rozstrzygniętego wyniku)

Mam nadzieję, że pomogłem

Joseph oun
źródło
1
Głosowałem w dół, ponieważ twoja odpowiedź jest tak gramatycznie i formalnie błędna, że ​​nie mogłem uzyskać z niej żadnych wiarygodnych informacji.
Edoardoo,
4
var result = (callback || angular.noop)(params)

To najkrótszy sposób

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

Biorąc pod uwagę, że callback var będzie funkcją

Jonas Sciangula Street
źródło
to jest eleganckie
Faiz Mohamed Haneef
2

Jeśli chcesz oficjalną dokumentację tutaj, to link . To całkiem proste. Wklejałem też aktualną dokumentację z linku.


Funkcja, która nie wykonuje żadnych operacji. Ta funkcja może być przydatna podczas pisania kodu w stylu funkcjonalnym.

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

Nafeez Abrar
źródło
0

Sztuczka: możesz jej również użyć, aby dodać trójskładnik do ng-clickatrybutu:

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

Dopóki się nie dowiedziałem, możesz użyć ng-click = "variable && doSomething ()" `

Jeffrey Roosendaal
źródło
1
ng-click="(variable) ? doSomething() : true"zadziała również
pwolaq
ng-click = "(zmienna)? doSomething (): ''" również zadziała
joseph oun