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

131
Vistas
Secuencial al mapear una matriz con promesa en javascript

Tuve que preguntar ya que no puedo encontrar una manera decente de resolverlo. He seguido el tutorial de Cómo resolver las promesas de JavaScript secuencialmente (una por una) pero aún no puede funcionar en mi situación después de modificarla.

Llamé a una consulta SQLite para obtener datos y obtener una matriz de datos como respuesta. Luego llamo a la función a para comenzar a esperar todo el otro proceso hasta que se complete este subproceso.

Ejemplo de respuesta: [{"TSTaskID": 1638938895}, {"TSTaskID": 1638945283}]

 async function getUnsyncRecordFromLocal() { /// ... and the rest of the code send query to SQLite callTasks(resp); } const callTasks = async (response) => { const allPromise = Promise.all(response.map(async (_item) => { task1(_item) .then((resp1) => task2(resp1)) .then((resp2) => task3(resp2)) .catch(console.error); })) const lists = await allPromise; } const task1 = async (TSTaskID) => { return new Promise((resolve, reject) => { console.log('task1 done.', TSTaskID); resolve(TSTaskID) }) /** implementation */ }; const task2 = async (TSTaskID) => { return new Promise((resolve, reject) => { console.log('task2 done.', TSTaskID); resolve(TSTaskID) }) /** implementation */ }; const task3 = async (TSTaskID) => { return new Promise((resolve, reject) => { console.log('task3 done.', TSTaskID); resolve(TSTaskID); }) /** implementation */ };

El registro al hacerlo de esta manera

 LOG task1 done. 1638938895 LOG task1 done. 1638945283 LOG task2 done. 1638938895 LOG task2 done. 1638945283 LOG task3 done. 1638938895 LOG task3 done. 1638945283

como quiero que se vea

 LOG task1 done. 1638938895 LOG task2 done. 1638938895 LOG task3 done. 1638938895 LOG task1 done. 1638945283 LOG task2 done. 1638945283 LOG task3 done. 1638945283

Lo intenté de varias maneras usando la async function pero la tarea aún no se completó en secuencia. Me gusta la tarea 1, 2, 3 para el mismo número y la siguiente tarea con el mismo número. Porque necesito verificar con la base de datos del servidor y actualizar la tabla SQLite local. Por lo tanto, debe esperar a que finalice uno antes de continuar con el siguiente.

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

0

Ambas Promesas iniciales de la tarea 1 se activarán al realizar el mapeo. Debe esperar a que se complete el primero antes de comenzar el segundo. p.ej

 const callTasks = async (response) => { const result = [] for(let i = 0; i < response.length; i++){ const current = response[i] try { const result1 = await task1() const result2 = await task2(result1) const result3 = await task3(result2) result.push(result3) } catch(e) { // catch here } } return result }
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