Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
¿Cómo puedo cronometrar correctamente las solicitudes de publicación de jQuery dentro de una función de intervalo?

Actualmente estoy haciendo algunas solicitudes de publicación dentro de una función de intervalo:

 let getStatusIV = setInterval( () => { let data = { action: 'get_products_status', import_id: importId }; $.post( ajaxurl, data, function () { } ).done( response => { if (response.success && response.data) { // showLoadingSpinner( '#wpcontent', response.data ); <- Sets the text at an overlay } } ) }, 500 );

Esta función de intervalo/publicación devuelve el estado de otra llamada AJAX desde mi servidor, por ejemplo: Processed 20 of 700 products

El problema es que las solicitudes no se resuelven en el orden en que fueron llamadas, por lo que obtengo este ejemplo:

 Processed 20 of 700 products Processed 19 of 700 products Processed 30 of 700 products Processed 80 of 700 products Processed 75 of 700 products

¿Alguna idea para arreglar esto? Realmente necesito intervalos cortos, por lo que solo configurar un intervalo de tiempo más largo no ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Así es como funciona la programación asíncrona. Dado que tiene tantas cosas para procesar, seguir llamando a .then() no será tan práctico entonces. Pero, ¿por qué es tan importante el orden? En realidad, la mayoría de las operaciones se procesan de forma asincrónica para maximizar la eficiencia. Por cierto, soy un novato, pero encontré esto, simplemente hice todo asincrónico para resolver el mismo problema.

------------------------------------

Bien, ahora encuentro una manera de lograr esto. Este es un ejemplo de JavaScript: The Definitive Guide de David Flanagan. Es posible que desee comprobarlo porque es realmente IMPRESIONANTE.

 function fetchSequentially(urls) { const bodies = []; //Response bodies are stored here function fetchOne(url) { return fetch(url) .then((response) => response.text()) .then((body) => { bodies.push(body); }); } let p = Promise.resolve(undefined); //Fulfill an empty promise to initiate the promise chain for (url of urls) { p = p.then(() => fetchOne(url)); //Build the promise chain automatically } return p.then(() => bodies); /* Return bodies. It's a promise so you may call .then() one last time to get the output. For the progress bar, you may want to use event to track how many requests have been done. */ }

En realidad, solo puede usar el evento para tratar el problema de la barra de progreso para mantener las solicitudes "paralelas". Simplemente emita un evento para anunciar que se ha realizado una solicitud. Escuche el evento y realice un seguimiento de cuántos en lugar de cuál ha terminado. Entonces la barra de progreso nunca retrocederá.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda