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

244
Vistas
Obtener resultado de eliminación múltiple por knex dentro de un bucle for

Estoy usando knexjs (constructor de consultas) en una aplicación CRUD. En una parte, es necesario eliminar de varias tablas, cada tabla varias filas e informar las filas eliminadas. El problema es que el método knex.del() devuelve una Promesa, y esa Promesa debe resolverse dentro de un bucle for. ¿Cómo puedo obtener el "informe" de las filas eliminadas en cada tabla en el objeto eliminado por ese bucle? Probé métodos como Promise.all , reduce( ) pero aún enfrentaba el mismo problema (objeto eliminado no resuelto).

 async function customDelete ( tableList) { //tableList is an object, where keys = tables, and values correspond to row ids to delete in each table const deleted = { }; for (const table of tableList) { if (table in aConditionCheckList) { console.log("table:", table, "-- ids to delete: ", tableList[table]); deleted[table] = knex(table).whereIn('id', tableList[table]).del() .returning('id'). .then( result => { deleted[table] = result; notDeleted = tableList[table].filter(x => !result.includes(x)); console.log("***deleted | notDeleted:", result, notDeleted); if(notDeleted.length){ console.warn('deleting', table, 'no such object(s)', notDeleted); } return result; }); } } return deleted; }

y la parte que llama customDelete () :

 if (req.body && req.body.sync && req.body.sync.delete) { sync.deleted = await customDelete (req.body.sync.delete); console.log("deleted rows:", sync.deleted) }

Sin await before knex(table).del( ) el objeto devuelto es Promise {<pending>} ,

 deleted[table] = knex(table).whereIn('id', tableList[table]).del().returning('id').then(...)

con await , el script se cuelga para siempre.

 deleted[table] = await knex(table).whereIn('id', tableList[table]).del().returning('id').then(...)

Resultado esperado: un objeto:

 deleted = { "table1": [1, 2, 4, 5, 12], "table2": [2,3,4,6]} //*etc.*

¿Cómo puedo solucionar esto?

about 4 years ago · Juan Pablo Isaza
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