gpt4 book ai didi

javascript - 从 SQLite 中提取数据

转载 作者:行者123 更新时间:2023-12-03 12:15:45 25 4
gpt4 key购买 nike

我遇到问题,不知道如何解决。

我正在开发一个小型网络应用程序。在应用程序中有一个发布系统用户可以在其中发布文章。现在,当用户登录时,我保存他的电子邮件(对每个用户来说都是唯一的)在 SQLite 数据库中,当用户添加帖子时,我将“帖子表单”中的所有数据和他的电子邮件发送到服务器(然后我将其保存在 mongoDB 中)。问题是电子邮件始终是未定义的。以下是代码的相关部分:

从数据库中提取数据

function extractDetalisFromDB(){
db.transaction(queryDB, errorCB);
}


// Extracting the relevant data - there is always only one user in the db, hence the 'id=1'
function queryDB(tx) {
tx.executeSql('SELECT * FROM currentUser WHERE id=1', [], querySuccess, onError);
}


function querySuccess(tx, results) {
var len = results.rows.length;
currentUserName = results.rows.item(0).name;
currentUserEmail = results.rows.item(0).data;
}

currentUserName 和 currentUserEmail 是全局变量。

验证并发布表单

function validateNewPost() {
// Here I validate the data from the form... works well.

if(error_appear === "false") {
extractDetalisFromDB();
console.log(currentUserName + ' ' + currentUserEmail); // This is undefined
var newPostJson = { writer: currentUserEmail, title: title.value, artist: artist.value,
albumOrSong: albumSong.value, content: content.value, genre:
genre.value};

$.post(URLAddress + '/addPost', newPostJson).done(function(data) {});
window.location = '#index';
}
}

问题是:

控制台日志和我发送到服务器的数据始终是未定义的,因为它发生在从 SQLite 检索数据的回调函数结束之前。

我应该如何重构我的代码,以便结束从数据库的提取,然后将数据发送到服务器?我查了这个问题但找不到答案。

最佳答案

鉴于 JavaScript 的同步特性,这是 JavaScript 中的一个常见问题。推荐的解决方案是将回调传递到异步方法中并在成功时触发该回调。

因此,查看您的代码,您可以将其修改为如下所示

function extractDetailsFromDB(callback) {
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM currentUser WHERE id=1', [], function(tx, results) {
var len = results.rows.length;
currentUserName = results.rows.item(0).name;
currentUserEmail = results.rows.item(0).data;
callback();
}, onError);
}, errorCb);
}
...
extractDetailsFromDb(function() {
console.log(currentUserName + ' ' + currentUserEmail); // This is undefined
var newPostJson = { writer: currentUserEmail, title: title.value, artist: artist.value,
albumOrSong: albumSong.value, content: content.value, genre:
genre.value};

$.post(URLAddress + '/addPost', newPostJson).done(function(data) {});
window.location = '#index';
});

关于javascript - 从 SQLite 中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com