Для чего используется Angular.noop?


86

Я пробовал искать его везде, даже в документации Angular.org, но не смог найти подробного объяснения реализации. Было бы очень полезно, если бы кто-нибудь мог это объяснить.


это просто пустая функция, которая ничего не делает
doodeec

1
Это я уже получил. Но почему мы так его используем? «успех = успех || angular.noop;»
Harsh

1
похоже, что у @lechariotdor есть лучший ответ ... вы можете переместить свое согласие, чтобы посетители этой страницы быстрее
перенаправлялись

Ответы:


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 01

Использование 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

* этот ответ предполагает, что вы не новичок в angular

Angular.noop - это пустая функция, которая в некоторых случаях может использоваться как заполнитель.

например:

Представьте, что вы используете q.all, который выполняет несколько вызовов API и возвращает одно обещание. Если некоторые из этих вызовов терпят неудачу, но вам все еще нужно обрабатывать те, которые не завершились ошибкой, используйте angular noop в качестве обратного вызова для вызовов api, когда вы перехватываете вызовы. Если вы не используете angular noop, q.all отклонит все, если один вызов не удастся.

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

Если вызов завершился неудачно, Angular проигнорирует это и выполнит другой вызов (но u все равно будет undefined для первого разрешенного результата)

Надеюсь что помог


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 (): ''" также будет работать
joseph oun 07
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.