Node.js async.each不给出结果吗?
这是我的代码:Node.js async.each不给出结果吗?,node.js,express,async.js,Node.js,Express,Async.js,这是我的代码: var shopId=[1,2,3,4]; async.each(shopId,function (item,callback) { model.client.query("SELECT categoryId shopId=? ", [shopId], function (err, rows) { if (rows.length > 0) { var asyncData = rows; //catego
var shopId=[1,2,3,4];
async.each(shopId,function (item,callback) {
model.client.query("SELECT categoryId shopId=? ", [shopId], function (err, rows) {
if (rows.length > 0) {
var asyncData = rows;
//categoryId will be in the format [1,2,3,4]
async.each(asyncData,function (item, callback) {
var categoryId = item.categoryId;
async.series([
function (callback) {
model.client.query("select categoryName from category where categoryId = ?", [categoryId], function (err, data) {
callback(null, data);
});
}],
function (err, results) {
item.category = results[0];
callback();
});
},function (err) {
callback(asyncData); //getting data here
});
}
});
},function (err,result) {
res.json(result); //not getting data here
});
我不熟悉aysnc方法。我无法将结果传递给final函数。假设有一个
shop
表,您可以加入表以保存查询
const sql='从category as c中选择categoryName,在c.categoryId=s.categoryId中作为s加入商店,其中s.shopId=?'
然后
另外,考虑到您的代码,我建议您以不同的名称命名回调,以避免错误或忘记。i、 e
async.each([], function(item, cbkGlobal) {
async.each([], function(item, cbkEach) {});
});
当您希望多个函数按顺序执行时,
async.series
非常有用。但是这里您只执行一个函数…您可以在第一个async
块上方声明一个对象,然后将任何结果附加到它,并在最后的回调中使用此函数。如果您使用的是express,则可以使用req
对象进行相同的操作。但是您必须在多个中间件中打破这个代码块,它是嵌套的,因此更容易出错,也更难理解。使用async.map
而不是每个您使用的是mysql吗?我想你可以得到很多cleaner@J是的,我正在使用我的sql
async.each([], function(item, cbkGlobal) {
async.each([], function(item, cbkEach) {});
});