javascript - 从 sqlite 获取时无法在 javascript 函数中分配值

标签 javascript node.js sqlite electron

从 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/

相关文章:

javascript - 通过 ng-repeat 更改后,在 ng-model 对象中添加新属性

javascript - Sequelize 等到循环完成回调

python - 将UNICODE插入sqlite3

javascript - OL3 删除拖动框交互

javascript - Firefox 和 NPAPI 插件 : can they be restricted (to be only used on certain pages)?

javascript - Node.js 对象不是函数 - module.exports

java - SQLite数据库不保存数据为什么不工作

jquery - PhoneGap + jQuery Mobile在Android 2.1访问HTML5 Sqlite数据库问题

javascript - 如何动态获取组名称并进行循环javascript

node.js - 如何在 WebWorkers 中浏览器化独立模块