gpt4 book ai didi

javascript - 嵌套函数不返回

转载 作者:行者123 更新时间:2023-11-30 13:01:29 24 4
gpt4 key购买 nike

我正在构建一个 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 变量做什么,都需要在该函数中启动。

关于javascript - 嵌套函数不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com