【问题标题】:javascript - OOP - executeSql return the result into a var , it shows undefinedjavascript - OOP - executeSql 将结果返回到 var 中,它显示未定义
【发布时间】:2015-07-07 10:36:15
【问题描述】:

我正在尝试使用 Phonegap 函数 executeSql 来获取带有 select 语句的 SQL 查询,我只想从我的 OOP 函数返回查询结果 我读了这个问题 Return executeSQL function 但我不能很好地理解它,所以我不能将它应用到我的代码中

function Invoice() {
    this.read = function(){
        var stmnt = "SELECT * FROM invoices ORDER BY ID DESC";
    function callback(callback_fun){        
        var myrows = [];
        db.transaction(function(tx){
            tx.executeSql(stmnt, [], function(tx,result){
                for(var i = 0; i < result.rows.length; i++){
                    var row = result.rows.item(i);
                    myrows.push(row);
                }
                //console.log(myrows);
                callback_fun(myrows);
            }, function(tx,error){
                alert('Error: '+error.message);
                return;
         });
     });
    }
    callback(function(newResult){
        return  newResult;
     });
   };
};
var newInvoice = new Invoice();
var myResult = newInvoice.read();
alert(myResult); 

【问题讨论】:

  • 查看我的更新。刚刚添加了一些 jsbin 示例

标签: javascript cordova oop callback


【解决方案1】:

您需要将您的 callback() 加上 callback_fun() 设置为返回值,如下所示:

function Invoice() {
     this.read = function(){
         var stmnt = "SELECT * FROM invoices ORDER BY ID DESC";
         function callback(callback_fun){        
            var myrows = [];
            db.transaction(function(tx){
                tx.executeSql(stmnt, [], function(tx,result){
                    for(var i = 0; i < result.rows.length; i++){
                        var row = result.rows.item(i);
                        myrows.push(row);
                    }
                    //console.log(myrows);
                    return callback_fun(myrows); // <<----- RETURN
                }, function(tx,error){
                    alert('Error: '+error.message);
                    return;
             });
         });
     }
     return callback(function(newResult){ // <<<<<<<<----------- RETURN
        return  newResult;
     });
   };
};

Javascript 调用栈是什么样子的:

  1. 您正在调用 Invoice.read(),但 read-Function 没有 return 关键字,因此它不返回任何内容,导致 undefined
  2. 您正在调用回调函数。这也没有返回任何内容。

EDIT2:
哦,好的,您正在调用另一个函数 db.transaction,该函数当前将值返回给您的回调函数。所以你可能会这样做:

function callback(callback_fun){        
    var myrows = [];
    return db.transaction(function(tx){
        tx.executeSql(stmnt, [], function(tx,result){
            for(var i = 0; i < result.rows.length; i++){
                var row = result.rows.item(i);
                myrows.push(row);
            }
            //console.log(myrows);
            return callback_fun(myrows); // <<----- RETURN
        }, function(tx,error){
            alert('Error: '+error.message);
            return;
        });
     });
 }

编辑: 这是你的代码。哦,稍微简化了一点:JSBIN
这是我的代码。 JSBIN-Working Example
需要按右上角的Run with JS

【讨论】:

  • 它仍然返回 undefined
  • 当我尝试return callback(function(newResult){ alert(newResult); // Shows a great working message return newResult; }); 时,出现一个包含对象的警报:/ alert() 正在工作,但返回不是!!!
  • 你设置了两个返回关键字!?你正在返回你的方法调用callback(function(){...});,这也返回了一些东西?
猜你喜欢
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多