javascript - solucionar - pdf tag html
Javascript está sincronizado(bloqueando) o asÃncrono(no bloqueando) por defecto (3)
El núcleo de JavaScript es en gran parte síncrono, en el sentido de que las funciones completan su tarea completamente, antes de completar. Antes de la llegada de AJAX, realmente solo setTimeout y setInterval proporcionaban un comportamiento asíncrono.
Sin embargo, es fácil olvidar que los controladores de eventos son, efectivamente, un código asíncrono. Adjuntar un manejador no invoca el código del manejador y ese código no se ejecuta hasta un tiempo desconocido en el futuro.
Luego vino AJAX, con sus llamadas al servidor. Estas llamadas podrían configurarse para ser sincrónicas, pero los desarrolladores generalmente preferían las llamadas asíncronas y usaban métodos de devolución de llamada para implementarlas.
Luego, vimos la proliferación de bibliotecas y herramientas de JS. Estos se esforzaron por homogeneizar las implementaciones de los distintos navegadores y se basaron en el enfoque de devolución de llamada al código asíncrono. También comenzó a ver muchas más devoluciones de llamada sincrónicas para cosas como la iteración de matrices o el manejo de resultados de consultas CSS.
Ahora, estamos viendo Deferreds and Promises en la mezcla. Estos son objetos que representan el valor de una operación de larga duración y proporcionan una API para manejar ese valor cuando llega.
NodeJS se inclina hacia un enfoque asíncrono a muchas cosas; que mucho es verdad Sin embargo, esta es más una decisión de diseño de su parte, en lugar de cualquier naturaleza asíncrona inherente de JS.
Estoy tratando de agarrar en Javascript funciones asíncronas y devoluciones de llamada.
Me quedé atascado en el concepto de funciones de devolución de llamada, donde estoy leyendo en algunos lugares: se utilizan para tener ejecución secuencial de código (principalmente en el contexto de jquery, por ejemplo, animate) y en algunos lugares especialmente en el contexto de Nodejs; Se utilizan para tener una ejecución paralela asíncrona y evitar el bloqueo de código.
Entonces, ¿puede algún experto en este tema arrojar luz sobre esto y despejar esta confusión en mi mente (ejemplos?). por lo que podría hacer mi mente para el uso de la función de devolución de llamada
¿O eso depende únicamente del lugar de donde esté llamando / colocando una función de devolución de llamada en su código? .
Gracias,
PD: Tengo miedo de que esta pregunta sea tan subjetiva como subjetiva pero aún así puedo esperar una respuesta concreta para esto (quizás algunos ejemplos)
Edit: en realidad este es el ejemplo de internet que me hace ambiguo:
function do_a(){
// simulate a time consuming function
setTimeout( function(){
console.log( ''`do_a`: this takes longer than `do_b`'' );
}, 1000 );
}
function do_b(){
console.log( ''`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`'' );
}
do_a();
do_b();
Resultado
`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`
`do_a`: this takes longer than `do_b`
cuando JS es secuencial, entonces do_b siempre debe ir después de do_a de acuerdo con mi entendimiento.
En los procesos de ejecución prolongada del nodo, use process.nextTick()
para poner en cola las funciones / devoluciones de llamada. Esto generalmente se hace en la API del nodo y, a menos que su programación (fuera de la API) con algo que esté bloqueando o un código que se esté ejecutando durante mucho tiempo, no le afecte mucho. El siguiente enlace debería explicarlo mejor de lo que puedo.
jQuery AJAX también recibe devoluciones de llamada y, como tal, está codificado para no esperar las respuestas del servidor antes de pasar al siguiente bloque de código. Simplemente recuerda la función para ejecutarse cuando el servidor responde. Esto se basa en el objeto XMLHTTPRequest que exponen los navegadores. El objeto XHR recordará la función para devolver la llamada cuando se devuelva la respuesta.
setTimeout(fn, 0)
de javascript ejecutará una función una vez que la pila de llamadas esté vacía (la siguiente señal gratuita disponible) que se puede usar para crear funciones asíncronas. Pregunta de setTimeout (fn, 0) sobre
Para resumir las capacidades asíncronas de javascript, hay tanto que ver con los entornos en los que están programados como javascript. No obtienes ninguna magia con solo usar muchas llamadas de función y devoluciones de llamada a menos que estés usando algún API / script.
Jquery Deferred Object es otro buen enlace para las capacidades asíncronas de jQuery. Google puede encontrar información sobre cómo funciona jQuery Deferred para obtener más información.
Javascript siempre es un lenguaje de subproceso único síncrono (bloqueante) pero podemos hacer que Javascript actúe de forma asíncrona a través de la programación.
Código síncrono:
console.log(''a'');
console.log(''b'');
Código asíncrono:
console.log(''a'');
setTimeout(function() {
console.log(''b'');
}, 1000);
setTimeout(function() {
console.log(''c'');
}, 1000);
setTimeout(function() {
console.log(''d'');
}, 1000);
console.log(''e'');
Esto produce: aebcd