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.


é 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);

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);
}

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


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


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


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);
}


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 ()" `


1
ng-click="(variable) ? doSomething() : true"também funcionaria
pwolaq

ng-click = "(variável)? doSomething (): ''" também funcionaria
joseph oun
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.