[英]Get a returned value in a callback on main function
我正在使用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開發模式的表格中看到了新行。
有什么建議嗎?
如果將returnId的聲明移到函數外部,然后調用該函數兩次,您將看到返回的值是第一個插入的ID,因此已對其進行了設置。 看起來好像是因為數據庫是異步的,所以在函數返回之后就設置了id,這很有意義。
根據W3C規范,應該有一個openDatabaseSync可以代替openDatabase使用,但我無法在Safari(5.0.1)中使用它。
顯然,我不知道您所發布的代碼片段之外的代碼是什么樣子,但是希望您能夠對其進行重構,因此您無需返回值,而是可以在回調中管理返回的id 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.