0

我有以下功能:

function query(db, querystr){

    var resultSet;

    db.transaction(function(tx){

        tx.executeSql(querystr, [], function(tx, results){


            console.log("ROWS ---> "+results.rows);

            resultSet = results.rows;

        }, dbError);

    }, dbError, dbSuccess);

    return resultSet;

}

如何在 main 函数中获取 results.rows 以便返回给调用者?

假设调用者执行以下操作: var result_rows = query(db, 'select 1 from dual');

如何确保 result_rows 从 tx.executeSql 嵌套函数中获取 results.rows 值?我在此示例中所做的方式是调用者未定义。

谢谢你,TS

4

2 回答 2

0

尝试这样的事情。将回调函数传递给query()函数,在executeSql函数执行完毕后调用。

function query("ss","querystr" function (data){ 
//data contains  results.rows from query function
});

function query(db, querystr, cb){

    db.transaction(function(tx){

        tx.executeSql(querystr, [], function(tx, results){

            cb(results.rows);
            //console.log("ROWS ---> "+results.rows);

            resultSet = results.rows;

        }, dbError);

    }, dbError, dbSuccess);
}
于 2013-07-16T19:28:17.207 回答
0

对于初学者来说,Barmar 的评论是正确的:您永远无法真正保证数据会返回到同一个 Javascript 线程/堆栈/无论您调用什么,因此您不能只返回它。

对异步检索项执行操作的最常见模式是请求函数应传入一个 onSuccess 函数,以将结果数据作为参数调用。这种模式的性能要好得多,因为 UI 线程没有被阻塞。

var pizza = getMeAPizza('pepperoni');
console.log('Yesss, got my pizza.');

//becomes...

getMeAPizza('pepperoni', function(pizza) {
  console.log('Yesss, got my pizza.');
}

我认为如果您正在开发一个 JQuery 插件,据我了解,一种常见的模式是在返回它时实现“延迟”对象定义,因此调用函数可以链接以下操作。这部分对我来说是二手知识,所以我不会费心去拼命解释它......

于 2013-07-16T19:33:39.113 回答