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) {});
});