嵌套函数未返回
Nested functions not returning
我正在构建一个phonegap应用程序。我使用的是一个web sql,在数据检索之前一切都很好。
function getItemGroups(){
var items_groups = new Array();
var db = window.openDatabase("merbokDB", "1.0", "MerbokDB", 5232394);
db.transaction(
function(tx){
tx.executeSql('SELECT * FROM item_groups',[],
function(tx,result){
if(result.rows.length > 0){
var len = result.rows.length;
for (var i=0; i<len; i++){
items_groups.push(result.rows.item(i).item_group);
}
console.log(items_groups.join());
}
}
,errorCB);
},
errorCB);
return items_groups;
}
var myproducts = getItemGroups();
我的问题是,当我运行代码时,"myproducts"变量为空。但是我能看到
console.log(items_groups.join());
下面一行在控制台中打印值。我回来的方式错了吗?
我对您使用的框架不是100%熟悉,但一个很好的猜测是,传递到链中每个步骤的函数都是用于异步回调的。因此,不能保证它们会在运行语句之前运行。所以本质上发生的是这条线:
return items_groups;
在执行这些内部函数中的任何一个之前执行。所以它只是返回它的初始值,这是一个空数组。
片刻后(甚至几毫秒后),内部函数被执行,控制台日志输出被看到。
当使用这样的异步功能时,不能依赖于按顺序执行的代码行序列。与其在"下一行"执行逻辑,不如在某种回调函数中执行。在这种情况下,检索数据后的最终回调似乎是这样的:
function(tx,result){
if(result.rows.length > 0){
var len = result.rows.length;
for (var i=0; i<len; i++){
items_groups.push(result.rows.item(i).item_group);
}
console.log(items_groups.join());
}
}
无论要对myproducts
变量执行什么操作,都需要在该函数中启动。
相关文章:
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串