Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

98
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda