从 sqlite 获取数据时无法在 JavaScript 函数中赋值。
例如: 此代码不起作用
function bookContent(dtb) {
var bkContent = '';
dtb.all("SELECT count(*) ttlRw FROM books;", function(err, row) {
if (err)
bkContent = "Error SQL";
else
{
if(parseInt(row[0].ttlRw)>0)
{
bkContent = row[0].ttlRw + " rows";
}
else
bkContent = 'No rows found!';
}
});
return bkContent;
}
它返回一个空值。
这正在工作
function bookContent(dtb) {
dtb.all("SELECT count(*) ttlRw FROM books;", function(err, row) {
if (err)
document.getElementById("bookCnt").innerHTML = "Error SQL";
else
{
if(parseInt(row[0].ttlRw)>0)
{
document.getElementById("bookCnt").innerHTML = row[0].ttlRw + " rows";
}
else
document.getElementById("bookCnt").innerHTML = 'No rows found!';
}
});
}
我想要第一个工作。请告诉我,我哪里错了。
最佳答案
您将在异步 dtb.all()
完成之前返回一个值。您需要将回调传递给 bookContent
并在数据库查询完成时调用它。
var globalBkContent = "";
function bookContent(dtb, callback) {
dtb.all("SELECT count(*) ttlRw FROM books;", function(err, row) {
if (err)
return callback("Error SQL");
else
{
if(parseInt(row[0].ttlRw)>0)
{
return callback(false, row[0].ttlRw + " rows");
}
else
return callback("No rows found!")
}
});
}
var dtb = new DatabaseInstance();//Or whatever your dtb variable is defined as.
bookContent(dtb, function(err, bkContent) {
if(err) throw(err);
globalBkContent = bkContent;
console.log(bkContent); //Here your bkContent & globalBkContent are both accessible and have the correct values.
//Make sure you don't do anything with globalBkContent until it is set by this function.
})
//If I access globalBkContent outside the callback above then it will still be an empty string.
关于javascript - 从 sqlite 获取时无法在 javascript 函数中分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033679/