Web SQL 事务在 javascript 函数中没有正确执行

ToT*_*oTa 5 javascript sql function web-sql

我有 JavaScript 函数,它从我的本地数据库返回选定值的数组。

var dataBase = {
  select : selectFunction
}

var db = openDatabase(..);

var data=[ ];
function selectFunction() {
    db.transaction(function (t) {
     t.executeSql("SELECT * FROM Table", [], function (t, results) {
       for (i = 0; i < results.rows.length; i++) {
            data.push(results.rows.item(i));
        }
     });
   });
  return data;//return "stackoverflow" //works fine
}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情

var getSelect = dataBase.select();
alert(getSelect);
Run Code Online (Sandbox Code Playgroud)

如果我返回像“stackoverflow”这样的字符串,这会正常工作

 alert result: stackoverflow
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试返回“数据”,则该函数返回未定义

我注意到 db.transaction在 return 语句之后执行,我不知道如何解决这个问题。

lev*_*evi 4

从异步函数返回结果时,必须使用回调,因为该函数将在实际操作完成之前返回。您可以像这样重写您的函数:

function selectFunction(callback) {
    db.transaction(function (t) {
     t.executeSql("SELECT * FROM Table", [], function (t, results) {
       for (i = 0; i < results.rows.length; i++) {
            data.push(results.rows.item(i));
        }
        callback(data);
     });
   });
}
Run Code Online (Sandbox Code Playgroud)

然后调用它,传递回调:

dataBase.select(function(data){
    var getSelect = data
    alert(getSelect);
});
Run Code Online (Sandbox Code Playgroud)