Para que é usado o Angular.noop?

86

Eu tentei pesquisar em todos os lugares, mesmo na documentação do Angular.org , mas não consegui encontrar nenhuma explicação detalhada sobre a implementação. Seria extremamente útil se alguém pudesse explicar.

Áspero
fonte
é apenas uma função vazia que não faz nada
doodeec
1
Isso eu já tenho. Mas por que usamos assim? "sucesso = sucesso || angular.noop;"
Harsh
1
parece que @lechariotdor tem a melhor resposta ... você pode mover sua aceitação para que os visitantes desta página sejam mais rapidamente direcionados para a melhor resposta
sfletche

Respostas:

148

angular.noop é uma função vazia que pode ser usada como espaço reservado quando você precisa passar alguma função como um parâmetro.

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
fonte
1
Qual é a vantagem de chamar em noopvez de apenas deixar a função em branco? Estética, performance ou outra coisa?
abyrne85
4
@ abyrne85 É mais esteticamente agradável e uma boa prática usar, angular.nooppois você sempre reutiliza a mesma função vazia (em vez de declarar uma nova função anônima toda vez). Em termos de desempenho, não faz diferença, pois o código para angular.noopé apenas uma função vazia nomeada noop.
tomaoq 01 de
Usar angular.noop cria um forte acoplamento com o objeto angular. Eu prefiro usar a função anônima embutida quando for necessário.
John Smith
Muito obrigado :) Você pode explicar o que é $ timeout (angular.noop)?
artgb
28

Acho extremamente útil ao escrever uma função que espera um retorno de chamada.

Exemplo:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

A função acima retornará um erro, quando for chamada sem especificar o terceiro argumento. myFunction(1, 'a');

Exemplo (usando 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
fonte
4
Ou você tem uma frase para isso: typeof callback === 'function' && callback();. Muito mais elegante ^^. Não usando angular.noopembora.
Freezystem
16

É uma função que não executa nenhuma operação. Isso é útil em situações como esta:

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

É útil ao escrever código no estilo funcional

Rahul Tripathi
fonte
2
Está bem. Entendi, obrigado. Mas apenas uma pequena pergunta: por que não podemos simplesmente fazer "(y) (x)" em vez de "(y || angular.noop) (x);"? Qual é a razão por trás disso?
Harsh
3
@AngularHarsh: - Você pode escrever isso. Talvez este exemplo ajude: - //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 falhou ");});
Rahul Tripathi
Acho que entendi agora. Então, o que estamos fazendo aqui é displayError é disparado em caso de falha, mas nada acontece em caso de sucesso (como sugerido).
Harsh
5

* esta resposta assume que você não é um iniciante em angular

Angular.noop é uma função vazia que pode ser usada como marcador em alguns casos

por exemplo:

Imagine que você esteja usando q.all, que faz várias chamadas para a api e retorna uma promessa. Se algumas dessas chamadas falharem, mas você ainda precisar lidar com aquelas que não falharam, use o angular noop como um retorno de chamada para as chamadas de API quando você capturar as chamadas. Se você não usar o noop angular, q.all rejeitará tudo se uma chamada falhar.

Q.all (somecall.catch (angular.noop), anothercall) .then (resolver resultado [0] e resultado [1])

Se uma chamada falhar, o Angular irá ignorar isso e realizar outra chamada (mas você continuará indefinido para o primeiro resultado resolvido)

Espero ter ajudado

Joseph Ones
fonte
1
Eu votei negativamente porque sua resposta está tão gramaticalmente e formalmente errada que não consegui obter nenhuma informação confiável dela.
Edoardoo de
4
var result = (callback || angular.noop)(params)

É a maneira mais curta de fazer

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

Levando em consideração que o callback var será uma função

Rua Jonas Sciangula
fonte
isso é elegante
Faiz Mohamed Haneef
2

Se você quiser a documentação oficial aqui está o link . É muito simples. Também colei a documentação atual do link.


Uma função que não executa nenhuma operação. Esta função pode ser útil ao escrever código no estilo funcional.

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

Nafeez Abrar
fonte
0

Truque: você também pode usá-lo para adicionar um ternário a um ng-clickatributo:

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

Até eu descobrir que você poderia usar ng-click = "variable && doSomething ()" `

Jeffrey Roosendaal
fonte
1
ng-click="(variable) ? doSomething() : true"também funcionaria
pwolaq
ng-click = "(variável)? doSomething (): ''" também funcionaria
joseph oun