【发布时间】:2017-08-22 22:45:59
【问题描述】:
这是我的代码:
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 方法的新手。我无法将结果传递给最终函数。
【问题讨论】:
-
您可以在第一个
async块上方声明一个对象,然后将任何结果附加到它并在最终回调中使用它。如果您使用的是 express,您可以使用req对象。但是你必须在多个中间件中打破这个代码块,它非常嵌套,因此更容易出错且难以理解。 -
使用
async.map而不是each -
你在使用 mysql 吗?我认为你的代码可以变得更干净
-
@Jérôme ya,我正在使用我的 sql