2010-02-23 20 views
7

¿Alguien me puede decir cómo activar dos (o más) funciones de JavaScript AJAX en paralelo?¿Cómo activar dos funciones de JavaScript en paralelo?

+3

Ya lo ha preguntado dos veces: http://stackoverflow.com/questions/2312749/ y http://stackoverflow.com/questions/2306334/ –

+1

@John: estas no son las mismas preguntas. Los anteriores 2 son sobre funciones de llamada con ASP. Esta es una versión mucho más simple de los 2 anteriores, creo que esta pregunta debe permanecer abierta. –

+0

pero el problema es que no funciona en paralelo, una función después de otra ... Necesito algo como imagen en el lateral del enlace siguiente http://piecesofrakesh.blogspot.com/2009/03/downloading-javascript-files-in .html – Alex

Respuesta

0

¿Esto es lo que estás buscando?

setTimeout('JsFunction1(val);', 0); 
setTimeout('JsFunction2(val);', 0); 
+3

Esto no los ejecutará en paralelo. JsFunction1 siempre se ejecutará primero, sin importar qué. setTimeout 0 simplemente empuja el código al final de la pila de ejecución. –

+1

no se puede obtener nada en JS para que se ejecute realmente al mismo tiempo, pero se puede hacer que se ejecuten de manera "asíncrona" (sé que JS tiene una secuencia simple, por lo que no es asíncrono, o al menos no lo era hasta que apareció Chrome). ¿La WTF está con usted buscando esta publicación más de dos semanas después para hacer un comentario al azar como ese? ¿Quién tiene esa clase de tiempo? – used2could

14

Esto no es posible. Javascript solo puede funcionar en un único hilo y no hay forma de que realmente tenga dos funciones ejecutándose en paralelo. Necesita hacer una llamada y luego la otra. Las devoluciones de llamada se llamarán (no necesariamente en el mismo orden con los métodos de invocación), cuando se han devuelto datos o se produce un error/tiempo de espera. Solo cuando se complete una devolución de llamada, se permitirá la segunda ejecución.

Tenga en cuenta también que los navegadores restringen el número de llamadas ajax activas. Por lo tanto, si intenta hacer demasiadas llamadas ajax, puede esperar (bloqueando todo el código javascript) para que se completen otras llamadas.

+2

¿Qué hay de http://adambom.github.io/parallel.js/? – osa

5

Búsqueda de trabajadores web. Estas son una característica nueva en los navegadores modernos y es posible que no estén disponibles en las versiones anteriores.

0

El uso de varios 'setInterval' puede hacer posible la ejecución en paralelo, aunque todavía puede ejecutarse en un solo núcleo. El siguiente código es un ejemplo de paralelización de una función func con una matriz de datos 'datas'. Para ejecutarlo, use Parallel (func, datas) donde func es el nombre de su función global y datas es una matriz de datos cada uno como entrada para func.

var i_array=new Array(); 
function Parallel(func,datas){ 
     $(datas).each(function(i,v){ 
      i_array[i]=setInterval(function(){ 
         clearInterval(i_array[i]); 
         window[func](datas[i]); 
         },10); 
      }); 
} 

Aquí está un jsfiddle test. La marca de tiempo en números enteros muestra que los dos ajax se estaban ejecutando en paralelo.

-2

Use window.open() para llamar a una página nueva. Esa página llamará a la primera función js. Después de que window.open() llame a la segunda función, técnicamente no está esperando que se complete la primera función. Simplemente espere a que se ejecute window.open() y luego el segundo se ejecutará.

-2

Javascript se ejecuta como un único hilo, si las solicitudes que desea realizar no tienen un IO, en ese caso simplemente no es posible, si hay una operación IO involucrada, puede ejecutar las dos funciones una sola después del otro, la naturaleza misma de javascript comenzará a ejecutar la siguiente función cuando espere IO. Por lo general, en los idiomas que admiten enhebrar lo mismo se logra automáticamente durante el período de descanso de la CPU para un hilo.

+0

¿Has oído hablar de devoluciones de llamadas? –

+0

@Jon Eustace Sí, si las dos retrollamadas son sincronizadas y no asincrónicas en tales casos, solo se ejecutará una función a la vez. – anksanu

Cuestiones relacionadas