【发布时间】:2017-10-12 04:19:09
【问题描述】:
我正在制作一个与本地数据库密切合作的 React 和 Electron 应用程序。我有 2 个表,“已阻止”和“未阻止”,此应用程序的目标是通过单击按钮将一行数据从一个表移动到另一个表。大多数事情似乎都运行良好,但我无法使用 redux 数据异步更新我的表。这是我必须获取数据的函数:
var fetchDBData = (tablename) => {
var db = new sqlite3.Database('processlist.db');
var queries = [];
db.each("SELECT * FROM " + tablename, function(err, row) {
queries.push(row);
});
db.close();
return queries;
};
我有 2 个更新 redux 的操作:
export function updateBlockedFiles(blacklist_queries) {
console.log(blacklist_queries);
return {
type: UPDATE_BLOCKED_FILES,
payload: blacklist_queries
}
};
export function updateWhitelistedFiles(whitelist_queries) {
console.log(whitelist_queries);
return {
type: UPDATE_WHITELISTED_FILES,
payload: whitelist_queries
}
};
我在组件中的调用如下所示:
unblockProcess(id) {
window.transferRowFromTable('blacklistdb', 'whitelistdb', id);
var blacklist_queries = window.fetchDBData('blacklistdb');
var whitelist_queries = window.fetchDBData('whitelistdb');
this.props.updateBlockedFiles(blacklist_queries);
this.props.updateWhitelistedFiles(whitelist_queries);
};
我发现的问题主要发生在 fetchDBData() 中。当我调用 this.props.updateBlockedFiles() 时,它会返回一个空的查询数组而不是填充的数组。我认为这可能是一个异步问题,但我不确定如何解决它。我已经看到了使用 Promise 的想法,但我不知道如何将它与 React 集成。任何帮助都会有所帮助!
【问题讨论】:
-
您实际在哪里执行查询?我认为您需要一个
db.run()电话或类似电话 - 我不知道确切的语法。 -
在 db.each() 查询中,我将每一行附加到查询 var,它之所以有效,是因为我在启动时调用了此函数并且表已正确填充,只有当我更新并调用它时再次返回一个空数组。
标签: javascript sqlite reactjs asynchronous electron