如果我运行下面的代码,第二个控制台日志输出只会重复第一个控制台日志输出的最后一行。
我理解这是因为所有嵌套的查询 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);
});
First console log output select * from ProductDescriptions where bsrt56 = 1.00 select * from ProductDescriptions where bsrt56 = 2.00 select * from ProductDescriptions where bsrt56 = 2.50 select * from ProductDescriptions where bsrt56 = 3.00 select * from ProductDescriptions where bsrt56 = 4.00 Second console log output select * from ProductDescriptions where bsrt56 = 4.00 select * from ProductDescriptions where bsrt56 = 4.00 select * from ProductDescriptions where bsrt56 = 4.00 select * from ProductDescriptions where bsrt56 = 4.00 select * from ProductDescriptions where bsrt56 = 4.00