我正在制作与本地数据库密切协作的React和Electron应用程序。我有2个表格,“阻止”和“畅通无阻”,这个应用程序的目标是只需点击一个按钮就可以将一行数据从一个表格移动到另一个表格。大多数事情似乎工作正常,但我遇到更新我的表异常与REDX数据。这里是我必须得到数据的功能:如何在返回响应之前等待数据库完成查询?
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个动作是更新终极版:
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,它的工作原理是因为我在启动时调用了该函数,并且表正确填充,只有当我更新并再次调用时才返回一个空数组。 –