¿Por qué el aplazamiento de subrayado soluciona muchos de mis problemas?

Después de usar la networking troncal durante un par de semanas, me he dado count de que el aplazamiento del subrayado terminó solucionando muchos de los problemas asynchronouss que encontré con respecto a la representación de varias vistas. ¿Alguien puede ayudarme a entender exactamente qué hace el aplazamiento del guión bajo y cómo es diferente que $ .ready () u otro tipo de espera de dom para representar funciones. ¿Cuáles son los inconvenientes de usarlo?

_.defer = function(func) { return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); }; 

 # These are equivalent _.defer(fn); setTimeout(fn, 1); 

Entonces defer es simplemente un setTimeout un milisegundo. (Tiene algunas características de conveniencia más, pero esas no son importantes aquí).


JavaScript ha ejecutado loops. Tiene un único subprocess, pero su ejecución se inicia y finaliza en function de events o timeres. Cada vez que su motor JS se activa para ejecutar algún código, está comenzando una iteración de su ciclo de ejecución.

Entonces, lo que defer es decir "ejecutar este código en el siguiente ciclo de ejecución".

 _.defer(function() { alert('after'); }); alert('before'); 

Esto alerta "antes" y luego "después". Esto se debe a que el ciclo de ejecución actual concluye el cual alerta "antes", y luego, inmediatamente después, se inicia un nuevo ciclo de ejecución y ejecuta el código de las alertas "después".

Entonces, cada vez que tenga un código aquí, pero quiere que ejecute el código que aparece después de este código primero, entonces usaría el defer .

 _.defer(functionToRunLast); functionToRunFirst(); 

Esto puede ser útil con el DOM. A veces lo cambias, pero los cambios no se analizan ni se procesan de inmediato. Al final del ciclo de ejecución, el browser capta y analiza y representa el DOM, luego se inicia el siguiente ciclo de ejecución y puede interactuar con el DOM recién generado.

(Exactamente qué escenarios causan este análisis de DOM retrasado, no estoy seguro, pero lo he notado en mis propios proyectos en el pasado).


NO es un reemploop para DOM listo. El siguiente ciclo de ejecución puede ocurrir antes de que el DOM listo se dispare, no confunda estos conceptos.