Pregunta

He estado probando las nuevas funciones diferidas de Ajax en JQuery 1.5 y estoy impresionado con su simplicidad y poder. Hay una pregunta más grande que he relacionado con la mejor manera de hacer cola estas solicitudes.

Tengo dos escenarios: en serie y paralelo, por así decirlo. Quiero evitar los términos Sync/Async porque quiero que todas estas sean solicitudes asíncronas para que el usuario pueda realizar otras acciones mientras espera que la cola procese. Luego quiero llamar a una sola función cuando la cola ha completado el procesamiento.

En "Modo en serie" que tiene dos solicitudes, me gustaría que se procesen de la siguiente manera:

RequestA -> Respuesta -> SolicB -> RespuestaB -> EndOfQueue

En "Modo paralelo" con dos solicitudes, quiero este resultado:

Requesta -> requestb (Response, ResponseB procesado cuando esté listo) -> Endofqueue

En cualquier caso, si alguna solicitud falla, me gustaría que la cola se detenga y pase el control a una función de falla.

Tengo requisitos que especifican una longitud de cola dinámica, así que no creo que pueda simplemente encadenar un montón de .Then () o .When () diferir juntos, ya que no sabré si son uno o cien ítems . Estoy ejecutando la lógica comercial en un servidor a través de la API de un proveedor, por lo que el lote del lado del servidor será difícil ya que no tengo control sobre ese código.

He creado casos de prueba que realizan el caso "paralelo" y llaman a la función When () después de todo se han completado con éxito, pero estas pruebas no son dinámicas en la longitud de la cola y no son portátiles para el modelo serie.

Puedo ver cómo podría crear un objeto de cola personalizado para manejar esto, pero parece que todas las partes ya están escritas para mí en jQuery (?). He mirado, pero no he encontrado un ejemplo que cubra solicitudes secuenciales de esta manera.

¿Alguna idea sobre cómo manejar esto con la cola jQuery/funcionalidad diferida?

¿Fue útil?

Solución

La forma más sencilla de lograr su solicitud -> Respuesta -> Requestb -> ResponseB El orden sería usar algo como esto:

var queue = [];

function qNext() {
    $.ajax(queue.shift()).success(qNext);
}

function qAjax(options) {
    queue.push(options);
}

qAjax({
    // $.ajax options
});

qAjax({
    // $.ajax options
});

qNext();

Ver MANIFESTACIÓN.

Esta es una versión algo simplificada de sus requisitos, pero sería fácil agregar una devolución de llamada para ejecutarse después de que la cola esté vacía.

¿Está seguro de que no desea el pedido de requesta -> requestb -> Responsea -> ResponseB?

Otros consejos

Consulte las dos preguntas que hice

  1. jQuery diferida no funciona
  2. jQuery. Cuando comprende

Ojalá deberías poder entender el concepto.

Mira esto comentario En el método .When () de las funciones de AJAX diferidos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top