将回调函数的参数值取出来

crazyboy2005 2012-02-24 12:09:37

function search(){
var searchData = null;
var query = "select * from table limit 1;";
localDB.transaction(function(transaction) {
transaction.executeSql(query, [],
function(transaction, results) {
//我想在这里将results的值传给变量searchData,便于其他地方使用
searchData = results; //但是这样没用
debug(searchData.rows.item(0)['info'], 1); //这里有结果输出
}, function(
transaction, error) {
debug("Error: " + error.code + "<br>Message: " + error.message, 1);
});
});
debug(searchData.rows.item(0)['info'], 1); //这里保错 Cannot read property 'rows' of null
return searchData; //其它地方处理需要searchData
}


请问怎么才能将records的值赋给searchData?
谢谢
...全文
501 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
calvin_guo 2012-02-24
  • 打赏
  • 举报
回复
麻烦你用“插入源代码”重新贴一下代码,这样粘贴谁帮你看?
马尾 2012-02-24
  • 打赏
  • 举报
回复
这代码格式要杀死一些人的眼细胞!!
未知数 2012-02-24
  • 打赏
  • 举报
回复
饿 自我纠正,return写错了,在在回调函数内return是不行的,不能作为search的返回值
没有办法把这个回调函数中获取的值返回到主函数(因为回调函数执行时主函数已经结束)
处理代码应该写在回调函数内,非要保存的话,用全局变量保存吧

未知数 2012-02-24
  • 打赏
  • 举报
回复
赋值是成功的,跟作用域也没有关系,没有把代码执行的先后次序搞清楚。
既然是回调函数,那一般是异步执行的,不会阻塞主线程,所以代码会继续执行,先执行了debug(searchData.rows.item(0)['info'], 1); 这句,这时searchData没有赋值,然后某个时间回调条件满足了,执行回调函数,searchData被赋值

function search(){
var searchData = null;
var query = "select * from table limit 1;";
localDB.transaction(function(transaction) {
transaction.executeSql(query, [],
function(transaction, results) {
//我想在这里将results的值传给变量searchData,便于其他地方使用
searchData = results; //但是这样没用
debug(searchData.rows.item(0)['info'], 1); //这里有结果输出,都有输出还叫没用?
},
function(
transaction, error) {
debug("Error: " + error.code + "<br>Message: " + error.message, 1);
});
});
debug(searchData.rows.item(0)['info'], 1); //这里保错 Cannot read property 'rows', of null 这儿报错是因为上面那个函数还没有执行,serchData没有被赋值。
return searchData; //其它地方处理需要searchData
}

修改如下:

function search(){
var searchData = null;
var query = "select * from table limit 1;";
localDB.transaction(function(transaction) {
transaction.executeSql(query, [],
function(transaction, results) {
//我想在这里将results的值传给变量searchData,便于其他地方使用
searchData = results; //但是这样没用
debug(searchData.rows.item(0)['info'], 1); //这里有结果输出
return searchData; //在回调函数中searchData已经赋值 }, function(
transaction, error) {
debug("Error: " + error.code + "<br>Message: " + error.message, 1);
return false;
});
});
}



oggmm 2012-02-24
  • 打赏
  • 举报
回复
1.将searchData提为全局变量 就可以保证作用域一致
2.保证所有用到searchData的地址都是在回调执行完之后才去取值的

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧