Javascript:如何从方法内的函数获取值

标签 javascript function sqlite methods nested

我尝试从方法内的嵌套函数获取值(true 或 false),但值返回 UNDEFINED。如何从对象嵌套函数中获取值?

var result = { 

        compute: function() {
            this.retorno = result.transaction();
        },

        transaction: function() {

            var db = window.sqlitePlugin.openDatabase({name: 'database.db', location: 'default'}); 

            db.transaction(checaFR,erroFR); //Check if (F)irst (R)un.                                

            function checaFR(tx){           //Check if table exists
                tx.executeSql('SELECT * FROM setup',[],checaFRSuccess,erroFR2);
                alert("Select Query OK");

            }

            function erroFR(err){           //Return if error
                alert('Ops - '+err);
                return false;               //This value I Need! :(
            }

            function checaFRSuccess(tx,result){
                alert("Query Sucess "+result.rows.length);
                return ('Rows: '+result.rows.length);
            }

            function erroFR2(err2) {        //If no DB table

                alert("erroFR2: "+JSON.stringify(err2));
                db.transaction(populateDB, errorCB, successCB);  //Start DB Populate
            }

            function populateDB(tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS setup (id INTEGER PRIMARY KEY AUTOINCREMENT, runned TEXT NOT NULL)');
                tx.executeSql('INSERT INTO setup(runned) VALUES ("1")');
            }

            function errorCB(errCB) {
                alert("Error processing SQL: "+errCB);
                return false;                  //This value I Need! :(
            }

            function successCB() {
                alert("successCB OK");
                return true;                   //This value I Need! :(
            }

        }
    };  
    result.compute();                          //Start the main function

return {
    retorno: "var: "+result.retorno      //This returns UNDEFINED
     };

如何从该函数中获取值并传递它?

注意:所有回调和警报都正常工作,包括数据库创建。 :D

最佳答案

您可以使用以下代码来引用嵌套在其中的函数。

result.transaction().erroFR();
result.transaction().errorCB();

但是之前您需要从需要公开访问的内部函数返回对象。这基本上是一个模块模式,您可以在其中仅向外界公开相关信息。因此,您需要公开如下所示的函数。请注意函数末尾的 return 语句,该语句返回一个对象。

var result = { 

        compute: function() {
            this.retorno = result.transaction();
        },

        transaction: function() {

            var db = window.sqlitePlugin.openDatabase({name: 'database.db', location: 'default'}); 

            db.transaction(checaFR,erroFR); //Check if (F)irst (R)un.                                

            function checaFR(tx){           //Check if table exists
                tx.executeSql('SELECT * FROM setup',[],checaFRSuccess,erroFR2);
                alert("Select Query OK");

            }

            function erroFR(err){           //Return if error
                alert('Ops - '+err);
                return false;               //This value I Need! :(
            }

            function checaFRSuccess(tx,result){
                alert("Query Sucess "+result.rows.length);
                return ('Rows: '+result.rows.length);
            }

            function erroFR2(err2) {        //If no DB table

                alert("erroFR2: "+JSON.stringify(err2));
                db.transaction(populateDB, errorCB, successCB);  //Start DB Populate
            }

            function populateDB(tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS setup (id INTEGER PRIMARY KEY AUTOINCREMENT, runned TEXT NOT NULL)');
                tx.executeSql('INSERT INTO setup(runned) VALUES ("1")');
            }

            function errorCB(errCB) {
                alert("Error processing SQL: "+errCB);
                return false;                  //This value I Need! :(
            }

            function successCB() {
                alert("successCB OK");
                return true;                   //This value I Need! :(
            }

            // Return an object containing functions which needs to be exposed publicly
            return {
               checaFR : checaFR,
               erroFR : erroFR,
               checaFRSuccess : checaFRSuccess,
               erroFR2 : erroFR2,
               populateDB : populateDB,
               errorCB : errorCB,
               successCB : successCB
            }

        }
    }; 

关于Javascript:如何从方法内的函数获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41229504/

相关文章:

javascript - Socket.io 发送到特定客户端

string - 如何从文件名中提取值?

C - 在函数中将值存储在数组中

c++ - 我的编译器是否混淆了它认为的重载函数?

php - 基于文件的 NoSql 数据库?

android - 如何在 Android 应用程序中加快数据库 (SQLite) 中的大数据插入

database - 保护平面文件(sqlite 数据库)免受 HTTP 访问的最受支持的方法?

javascript - 如何使用javascript下载doc文件

javascript - 如何在 JavaScript/JQuery 中输入时验证或屏蔽一些特殊字符

javascript - JQuery Mobile、查询字符串和多页面 ID