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

97
Vistas
Electron espera la respuesta de sqlite3

Tengo una solicitud de base de datos sqlite3 en mi main.js , que se activa al hacer clic en un botón en renderer.js .

La solicitud llega a mi main.js Sin embargo, no puedo esperar los resultados de la base de datos. El problema ya ocurre en main.js , por lo que estoy atascado incluso antes de que algo se devuelva a renderer.js .

Espero que alguien pueda decirme lo que me estoy perdiendo.

Aquí está mi código:

renderer.js

 $(document).on('click','#mybtn',function(e){ let query = "SELECT id, name FROM table1" // send (here is the issue) window.api.send("db-query", query) // (next step: receive, might be wrong but not yet my problem) window.api.receive(channel="receive-db-data", (data) => { console.log(data); }); });

main.js

 ipcMain.on(channel='db-query', async (e, query) => { console.log('query received: ' + query); let data = await db_request(query).then( function(value) { console.log('value: ' + value); return value; }, function(error) { console.log('error fetching data from db on query:' + query); } ) console.log("response ready: " + data); //returns undefined if 'return value' is used (otherwise nothing) // to send back to renderer.js later e.sender.send("db-data", data) }) let db_request = async (query) => { let data = [] var sqlite3 = require('sqlite3').verbose(); var dbPath = require('path').resolve(__dirname, '../../Fin.db') var db = new sqlite3.Database(dbPath) db.serialize(function(){ db.each(query, function(err, row) { console.log(row) data.push({"id": row.id, "name": row.name}) }); }); db.close(); console.log('db_request:' + data) return data }

Y así es como se ve mi terminal:

 query received: SELECT id, type, name FROM table1 db_request: value: response ready: undefined { id: 1, name: 'a' } { id: 2, name: 'b' } { id: 3, name: 'c' }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debe convertir el resultado de db_request en una Promesa, y la promesa se resolverá cuando todas las filas se envíen a los data . Cuando usa la palabra clave await , no hay necesidad de manejar una promesa con la cadena .then .

main.js se verá así:

 const sqlite3 = require('sqlite3').verbose(); const dbPath = require('path').resolve(__dirname, '../../Fin.db') ipcMain.on(channel='db-query', async (e, query) => { console.log('query received: ' + query) try { const data = await db_request(query); // remove .then console.log('value: ' + data) // to send back to renderer.js later e.sender.send("db-data", data) } catch (error) { console.log('error fetching data from db on query:' + query); e.sender.send("db-data", []) // send empty data or error ??? } }) let db_request = (query) => { const db = new sqlite3.Database(dbPath) return new Promise((resolve, reject) => { // return a promise // I think you dont need serialize for this case const data = [] db.each(query, (err, row) => { console.log(err, row) if (!err) { data.push({"id": row.id, "name": row.name}) } }, (error) => { if (error) { reject(error) } else { resolve(data) } }); }) }
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