在main函数的回调中获取返回值

时间:2011-08-30 13:41:32

标签: javascript html5 callback insert web-sql

我正在使用HTML5和网络数据库存储开发应用程序。

我想在表中插入一行并返回使用以下内容创建的新ID(表的主键):

function insertIntoTable(title, text, sketchFileName, categoryId)
{
    var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024);
    var returnedId = -1;
    db.transaction(
        function (tx) {
            if (sketchFileName == '')
            {
                tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)', 
                            [title, text, Date.now(), categoryId], 
                            function (transaction, resultSet) {
                                if (resultSet.rowsAffected) {
                                    returnedId = resultSet.insertId;
                                }
                            }, handleSQLError);
            }
        }, handleSQLError);
    );

    return returnedId;
}

但我总是得到-1。我使用Safari开发模式在表中看到了新行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果将returnedId的声明移到函数外部然后调用该函数两次,您将看到返回的值是第一个插入的id,因此正在设置它。看起来,因为数据库是异步的,所以在函数返回后设置id,这是有道理的。

根据W3C规范,应该有一个openDatabaseSync可以用来代替openDatabase,但我无法在Safari(5.0.1)中使用它。

显然,我不知道您发布的代码段之外的代码是什么样的,但希望您能够重构它,这样您就不需要返回值,而是可以管理返回的id在回调中。