我是 Node.js 和异步编码的新手。我需要编写与 Node.js 一起使用的嵌套 for 循环的等价物。我知道我的问题与此处发布的问题非常相似:nested loops asynchronusly in nodejs, next loop must start only after one getting completed,但即使在详细查看该帖子之后,我也无法修复我的代码。
我正在使用 XML 提要。“解析器”使用 xml2js 包。如果我删除 sql 查询(为此我正在使用 mysql 节点包),循环将完全按预期运行,但是当我放入 sql 查询时,所有订单都会首先得到处理,输出“DONE”,然后查询失败,因为它试图重复查找最后一个订单的项目。
我尝试用 async.forEach 循环替换 for 循环,但这没有帮助。
任何有关如何以更符合节点习惯的方式重新编码的帮助或建议将不胜感激。
非常感谢!六个霍比特人
parser.parseString(data, function (err, result) {
if(err) throw(err);
var numOrders = result['Root']['Orders'][0]['Order'].length;
var curr, currItem, currOrdId, items, sellersCode;
console.log("Logging IDs of", numOrders, "orders");
// for each order
for (var j=0; j<numOrders; j++){
//current order
curr = result['Root']['Orders'][0]['Order'][j];
currOrdId = curr['OrderId'][0]
items = curr['Items'][0]['Item'];
console.log("Order ID:", currOrdId, "--",items.length, "Items");
// for each item
for (var k=0; k<items.length; k++){
currItem = items[k];
sellersCode = currItem['SellersProductCode'][0];
var sqlQuery = 'select data_index, fulltext_id, cataloginventory_stock_item.product_id from catalogsearch_fulltext inner join cataloginventory_stock_item where catalogsearch_fulltext.data_index like "' + sellersCode + '|%"' + 'and cataloginventory_stock_item.item_id = catalogsearch_fulltext.product_id';
var query = connection.query(sqlQuery,function(err,rows,fields){
if (err) throw(err);
console.log(" Item ID :",currItem['ItemId'][0]);
console.log(" Full Text ID :", rows[0]['fulltext_id']);
console.log(" Product ID :", rows[0]['product_id']);
});
}//for
}//for
console.log("DONE");
});//parseString