首页 文章

websql成功回调查询后无法访问变量

提问于
浏览
0

相关问题(不工作):

scope-troubles-in-javascript-...

Pass extra parameters to WebSQL callback function?

我有一个'log'对象来捕获一些成功或错误变量,因为websql事务循环遍历查询 . 循环中有一个循环,它循环通过数据输入,该数据输入是以对象的数组中的对象形式从服务器提供的,基本上是表格然后是行 . 这一切都正常,直到调用sql-query(而不是最终的事务成功 . )的内部成功回调 . 从下面我可以看到,我试图调用函数构建器函数来捕获表名变量,但是在调用返回的函数时它是未定义的 . 我尝试了很多方法,但我最终只得到undefined或最后的表条目 .

我试图简化下面的代码以专注于这个问题,一些代码可能是凌乱的 . 我理解为什么它不可用由于异步性而不是如何解决它 .

addServData = function(data){
    var columns, colCount, rowCount, Q, Qmks, table, 
        rows, dataWatch = {success:{},error:{}};
    /*var tableName; //<-- MOVED THIS INTO LOOP AS THOUGHT WAS THE PROBLEM*/
    oDb.transaction(function(tx){
        for(var key in data){
            var tableName = key;
            table = data[key];
            rows = table.data;
            columns = table.columns;
            colCount = table.colLen;
            rowCount = table.rowLen;
        if(rowCount <= 0) continue;
            ...
        Q = 'BUILD QUERY.... (?,?,?)';

        for(var x = rows.length-1; x >=0; x--){
            var $i = rows.length - (x+1);// <-- INVERT COUNTER
            //sort row object to array in order of colums;
            var row = rows[$i],
                params = utils.sortObjtoArr(row, columns);

            tx.executeSql(Q, params,
                buildCallback(tblName),
                function(tx,error){
                    console.log('error: ', tx,error);
                    dataWatch.error[tblName + '::' + params[0]] = error;
                });
        }

        }


function buildCallback(tbl){ 
                //console.log('buildcallback'+tblName, tx); //PRINTS CORRECT NAME;
            return function(tx,success,tbl){
                console.log('success: ', tx, success, 'tblN:',tbl);//TBL = UNDEFINED;
                dataWatch.success[tbl + '::' + success.insertId] = success.rowsAffected;
                dataWatch.added += parseInt(success.rowsAffected);
            }
            }
    }, function(tx,error){
        console.log(error, dataWatch);

    }, 
    function(tx,success){
        console.log('success', dataWatch); //WORKS

    });
}

1 回答

  • 0

    对我来说标准疏忽让自己感到困惑 .

    事实证明,在我的回调构建器中,我试图从sql-queries成功调用函数中检索 tbl 变量,而不是从回调构建器的范围中检索!回电应该是:

    function buildCallback(tbl){ 
                // return function(tx,success,tbl){ <-- NOT THIS;
                return function(tx,success){ // <-- THIS;
                    console.log('success: ', tx, success, 'tblN:',tbl);//tbl = 'TABLE NAME';
                    .....
                }
                }
    

相关问题