Для чого використовується Angular.noop?


86

Я намагався шукати його скрізь, навіть у документації Angular.org, але не міг знайти детального пояснення з реалізацією. Було б дуже корисно, якщо б хтось пояснив це.


це просто порожня функція, яка нічого не робить
doodeec 12.03.14

1
Стільки я вже отримав. Але чому ми використовуємо це так? "успіх = успіх || angular.noop;"
Harsh

1
схоже, що @lechariotdor отримав кращу відповідь ... ви можете перенести своє прийняття, щоб відвідувачі цієї сторінки швидше переходили до найкращої відповіді
sfletche

Відповіді:


148

angular.noop - це порожня функція, яку можна використовувати як заповнювач, коли вам потрібно передати якусь функцію як параметр.

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
Яка вигода від дзвінка, noopа не просто залишати функцію порожньою? Естетика, продуктивність чи щось інше?
abyrne85

4
@ abyrne85 Це естетичніше та корисніша практика, angular.noopоскільки ви завжди повторно використовуєте ту саму порожню функцію (замість того, щоб щоразу оголошувати нову анонімну функцію). З angular.noopточки зору продуктивності це не має ніякої різниці, оскільки код - це просто порожня функція з іменем noop.
tomaoq

Використання angular.noop створює міцне зчеплення з кутовим об'єктом. Я вважаю за краще використовувати вбудовану анонімну функцію, коли це необхідно.
Джон Сміт

Велике спасибі :) Чи можете ви пояснити, що таке $ timeout (angular.noop)?
artgb

27

Я вважаю це надзвичайно корисним при написанні функції, яка очікує зворотного дзвінка.

Приклад:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Вищенаведена функція поверне помилку, коли вона буде викликана без вказівки третього аргументу. myFunction(1, 'a');

Приклад (з використанням 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
Або у вас є один вкладиш для цього: typeof callback === 'function' && callback();. Набагато стильніше ^^. Не використовуючи, angular.noopхоча.
Freezystem

16

Це функція, яка не виконує жодних операцій. Це корисно в такій ситуації:

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

Це корисно при написанні коду у функціональному стилі


2
В порядку. Зрозумів дякую. Але лише невеликий запит, чому ми не можемо просто зробити "(y) (x)" замість "(y || angular.noop) (x);"? Яка причина цього?
Harsh

3
@AngularHarsh: - Ви можете це написати. Можливо, цей приклад допоможе: - //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 ");});
Рахул Тріпаті

Думаю, я зрозумів це зараз. Отже, те, що ми робимо тут, - це displayError, що спрацьовує при відмові, але при успіху нічого не відбувається (як пропонується).
Harsh

5

* ця відповідь передбачає, що u ви не новачок у кутових

Angular.noop - це порожня функція, яку в деяких випадках можна використовувати як заповнювач

наприклад:

Уявіть, що ви використовуєте q.all, який робить кілька дзвінків на API і повертає одну обіцянку. Якщо деякі з цих викликів не вдаються, але вам все одно потрібно обробляти ті, які не провалились, використовуйте angular noop як зворотний виклик до дзвінків api, коли ви ловите дзвінки. Якщо ви не використовуєте кутовий noop, q.all відхилить все, якщо один виклик не вдається.

Q.all (somecall.catch (angular.noop), anothercall). Then (вирішити результат [0] і результат [1])

Якщо виклик не вдається, Angular проігнорує це та виконає інший виклик (але для першого розв'язаного результату ви все ще не визначені)

Сподіваюся, що я допоміг


1
Я проголосував за те, що ваша відповідь настільки граматично та формально неправильна, що я насправді не міг отримати від неї жодної достовірної інформації.
Edoardoo


2

Якщо ви хочете отримати офіційну документацію, ось посилання . Це досить просто. Я також вставив поточну документацію за посиланням.


Функція, яка не виконує жодних операцій. Ця функція може бути корисною при написанні коду у функціональному стилі.

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


0

Хитрість: Ви також можете використовувати його, щоб додати тернар до ng-clickатрибута:

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

Поки я не дізнався, ви можете використовувати ng-click = "variable && doSomething ()" `


1
ng-click="(variable) ? doSomething() : true"також спрацює
pwolaq

ng-click = "(змінний)? doSomething (): ''" також спрацював би
Джозеф Оун,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.