为什么我的 ipcMain 在读取数据库后返回一个空数组?
Why is my ipcMain returning an empty array after reading through a database?
对于我的项目,我使用电子并与 ipcRenderer 和 ipcMain 反应以与数据库通信。我可以看到它通过数据库,但它 return 是一个空数组。这就像在从数据库读取任何内容之前 returned 数组。
这是我在 ipc main 中使用的代码:
我期待它 return 类别的名称,但它 returns cateNames 空白。
ipcMain.on(channels.GET_CATS, async(event,type) => {
console.log("made it")
let cateNames=[];
db.each(`SELECT name FROM categories WHERE type=?`, [type],(err, row) => {
if (err) {
return console.error(err.message);
}
console.log(row.name);
cateNames.push(row.name);
});
console.log(cateNames);
event.sender.send(channels.GET_LOGIN, cateNames);
});
我发送请求
ipcRenderer.send(channels.GET_CATS,"Donation");
ipcRenderer.on 侦听会将数组输出到控制台。
Javascript / Node.js 按顺序执行命令,从一个命令移动到下一个命令时不“等待” 除非 明确告知通过使用 promises 和 async / await 命令。
您当前的代码 return 是一个空 cateNames
数组的原因是因为代码的执行不会“等待”db.each
命令到 return 它是打回来。回调仅在 DB 有一些 return 时被 returned,这将是一行或一个错误。这需要时间。与此同时,执行已转移到下一个命令。
要使此代码块“等待”直到数据库 returned 所有可用行(如果有),我们可以使用 promises.
相反,我提出了一种更简单的方法。而不是在每次 db.each
迭代时 push
ing row.name
,只需使用 db.all
并在之后制作响应。
ipcMain.on(channels.GET_CATS, async(event, type) => {
console.log("made it")
let cateNames = [];
db.all(`SELECT name FROM categories WHERE type=?`, [type], (err, rows) => {
if (err) {
return console.error(err.message);
}
for (let row of rows) {
cateNames.push(row.name);
}
console.log(cateNames);
// Use event.reply(channel, data);
event.reply(channels.GET_LOGIN, cateNames);
});
});
对于我的项目,我使用电子并与 ipcRenderer 和 ipcMain 反应以与数据库通信。我可以看到它通过数据库,但它 return 是一个空数组。这就像在从数据库读取任何内容之前 returned 数组。
这是我在 ipc main 中使用的代码: 我期待它 return 类别的名称,但它 returns cateNames 空白。
ipcMain.on(channels.GET_CATS, async(event,type) => {
console.log("made it")
let cateNames=[];
db.each(`SELECT name FROM categories WHERE type=?`, [type],(err, row) => {
if (err) {
return console.error(err.message);
}
console.log(row.name);
cateNames.push(row.name);
});
console.log(cateNames);
event.sender.send(channels.GET_LOGIN, cateNames);
});
我发送请求
ipcRenderer.send(channels.GET_CATS,"Donation");
ipcRenderer.on 侦听会将数组输出到控制台。
Javascript / Node.js 按顺序执行命令,从一个命令移动到下一个命令时不“等待” 除非 明确告知通过使用 promises 和 async / await 命令。
您当前的代码 return 是一个空 cateNames
数组的原因是因为代码的执行不会“等待”db.each
命令到 return 它是打回来。回调仅在 DB 有一些 return 时被 returned,这将是一行或一个错误。这需要时间。与此同时,执行已转移到下一个命令。
要使此代码块“等待”直到数据库 returned 所有可用行(如果有),我们可以使用 promises.
相反,我提出了一种更简单的方法。而不是在每次 db.each
迭代时 push
ing row.name
,只需使用 db.all
并在之后制作响应。
ipcMain.on(channels.GET_CATS, async(event, type) => {
console.log("made it")
let cateNames = [];
db.all(`SELECT name FROM categories WHERE type=?`, [type], (err, rows) => {
if (err) {
return console.error(err.message);
}
for (let row of rows) {
cateNames.push(row.name);
}
console.log(cateNames);
// Use event.reply(channel, data);
event.reply(channels.GET_LOGIN, cateNames);
});
});