Javascript 相同嵌套查询
可能重复:Javascript 相同嵌套查询,javascript,sql,closures,nested,Javascript,Sql,Closures,Nested,可能重复: 如果我运行下面的代码,第二个控制台日志输出只会重复第一个控制台日志输出的最后一行 我理解这是因为所有嵌套查询2都排队等待在其他所有操作完成后运行。同样,由于我们在函数中有一个函数,这会创建一个“闭包”,这意味着嵌套查询2只有一组变量,并且使用的是这些变量的最终状态,因此只有上一个查询1的结果会重复用于查询2。至少我认为这是正在发生的事情。问题是,我怎样才能改变它,使整个事情按顺序进行 谢谢 db.transaction(function(tx){ // Query 1
如果我运行下面的代码,第二个控制台日志输出只会重复第一个控制台日志输出的最后一行 我理解这是因为所有嵌套查询2都排队等待在其他所有操作完成后运行。同样,由于我们在函数中有一个函数,这会创建一个“闭包”,这意味着嵌套查询2只有一组变量,并且使用的是这些变量的最终状态,因此只有上一个查询1的结果会重复用于查询2。至少我认为这是正在发生的事情。问题是,我怎样才能改变它,使整个事情按顺序进行 谢谢
db.transaction(function(tx){
// Query 1
tx.executeSql("SELECT * FROM Products GROUP BY ssrt55", [], function(tx, listResults){
for (var i = 0; i < listResults.rows.length; i++) {
var lineData = listResults.rows.item(i);
var productDescriptionSQL = "select * from ProductDescriptions where bsrt56 = " + lineData['SSRT55'];
console.log(productDescriptionSQL);
// Query 2
tx.executeSql(productDescriptionSQL, [], function(tx, descriptionResults){
console.log(productDescriptionSQL);
}, onError);
}
}, onError);
});
尝试更改:
var lineData = listResults.rows.item(i);
致:
是的,如果您替换
console.log(productDescriptionSQL),则此操作有效在查询2中,使用sayloopdloop(tx,listResults)
进行编码>以便创建新变量,所有处理都可以在该函数中进行,并且当所有查询在最后一起运行时不会被覆盖
db.transaction(function(tx){
tx.executeSql("SELECT * FROM Products GROUP BY ssrt55", [], function(tx, listResults){
for (var i = 0; i < listResults.rows.length; i++) {
var lineData = listResults.rows.item(i);
//var lineData = listResults.rows[i].item[0];
var productDescriptionSQL = "select * from HierarchyDescriptions where psrt56 = '" + lineData['SSRT55']+"'";
console.log(productDescriptionSQL);
tx.executeSql(productDescriptionSQL, [], function(tx, listResults){
loopdloop(tx, listResults)
}, onError);
}
}, onError);
});
function loopdloop(tx, descResults){
console.log(descResults.rows.length);
for (var i = 0; i < descResults.rows.length; i++) {
var descriptionData = descResults.rows.item(i);
console.log(descriptionData['HDES56']);
}
}
db.事务(功能(tx){
tx.executeSql(“通过ssrt55从产品组中选择*”,[],函数(tx,listResults){
对于(var i=0;i
谢谢@Jamesvar lineData=listResults.rows[i]。项[0]代码>不起作用,它返回未定义。我返回了正确的行,因此我认为var lineData=listResults.rows.item(I)代码>可以,除非我遗漏了什么。
var lineData = listResults.rows[i].item[0];
db.transaction(function(tx){
tx.executeSql("SELECT * FROM Products GROUP BY ssrt55", [], function(tx, listResults){
for (var i = 0; i < listResults.rows.length; i++) {
var lineData = listResults.rows.item(i);
//var lineData = listResults.rows[i].item[0];
var productDescriptionSQL = "select * from HierarchyDescriptions where psrt56 = '" + lineData['SSRT55']+"'";
console.log(productDescriptionSQL);
tx.executeSql(productDescriptionSQL, [], function(tx, listResults){
loopdloop(tx, listResults)
}, onError);
}
}, onError);
});
function loopdloop(tx, descResults){
console.log(descResults.rows.length);
for (var i = 0; i < descResults.rows.length; i++) {
var descriptionData = descResults.rows.item(i);
console.log(descriptionData['HDES56']);
}
}