Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

118
Visualizações
Asignar noop a una variable

Estaba investigando el código fuente de Angular utils y encontré la siguiente línea:

 export const NOOP: any = () => {};

Bueno, arriba es un poco obvio. Declara una variable que no realiza ninguna operación. Ahora dentro de la misma biblioteca tengo el siguiente método:

 export function resolveViewDefinition(factory: ViewDefinitionFactory): ViewDefinition { let value: ViewDefinition = VIEW_DEFINITION_CACHE.get(factory) !; if (!value) { value = factory(() => NOOP); value.factory = factory; VIEW_DEFINITION_CACHE.set(factory, value); } return value; }

¿Cuál sería el efecto de simplemente no tener esa línea en su lugar y comentarla y tener el bloque de la siguiente manera:

 if (!value) { // value = factory(() => NOOP); value.factory = factory; VIEW_DEFINITION_CACHE.set(factory, value); }

Alguien podría elaborar más en esta línea:

 value = factory(() => NOOP);

y arrojar más luces sobre él? Puedo ver lo que está pasando pero no puedo entender los efectos de eliminarlo.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La función resolveViewDefinition se utiliza para obtener la definición de la vista. Primero intenta obtener value del caché y, si no hay ningún valor en caché, llama a ViewDefinitionFactory .

ViewDefinitionFactory toma la función como parámetro. ¿Por qué?

 /** * Factory for ViewDefinitions. * We use a function so we can reexecute it in case an error happens and use the given logger * function to log the error from the definition of the node, which is shown in all browser * logs. */ export interface ViewDefinitionFactory { (logger: NodeLogger): ViewDefinition; }

No necesitamos registrar errores cuando solo estamos obteniendo ViewDefinition , por lo que se llama con la función NOOP .

Pero cuando recibimos un error durante la ejecución de alguna acción dentro de la plantilla, angular está ejecutando esta fábrica con NodeLogger para determinar qué nodo causó el error.

Veamos ejemplo Plunker

 @Component({ selector: 'my-app', template: `<h2 (click)="x()">Hello</h2>` }) export class App {}

Aquí está la fábrica

 function View_App_0(l) { return jit_viewDef1(0,[ (l()(),jit_elementDef2(0,null,null,1,'h2',[],null,[[ null, 'click' ] ],function(v,en,$event) { var ad = true; var co = v.component; if (('click' === en)) { var pd_0 = (co.x() !== false); ad = (pd_0 && ad); } return ad; },null,null)), (l()(),jit_textDef3(null,['Hello'])) ] ,null,null); }

1) Aplicación en ejecución

 function resolveViewDefinition(factory) { var value = ((VIEW_DEFINITION_CACHE.get(factory))); // we haven't cached it yet if (!value) { // value is undefined value = factory(function () { return NOOP; }); //get ViewDefinition but do not log errors value.factory = factory; // save link to the factory so it can be used later VIEW_DEFINITION_CACHE.set(factory, value); // store factory } return value; }

2) Después de hacer clic en Hello

 ((logViewDef.factory))(nodeLogger); // use saved link to call factory with logger

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda