这是从我的表中获取详细信息的代码。
function listshops(callback)
{
var array=[3,4];/*shopId*/
async.each(array,function(dat,callback){
async.parallel([
function(callback){
client.connection.query('select * from shop where shopId=?',dat,function(err,data1){
callback(null,data1);
});
},
function (callback) {
client.connection.query('select * from image where shopId=?',dat,function(err,data2){
callback(null,data2);
});
}
],
function(err,data)
{
var result = data.reduce(function(prev, curr) { /*merging the array*/
return prev.concat(curr);
});
console.log(result);
});
});
}
我得到了像这样的输出:: http://i.stack.imgur.com/NVUAu.png
我想以下面的格式打印我的结果:
{
"shops": [
{
"shopId": "3",
"shopName": "1",
"address": "abc",
"contactNumber":"1234"
"images": [
{
"imageId": "1",
"shopId": "3",
"imageUrl": "aaa",
},
{
"imageId": "2",
"shopId": "3",
"imageUrl": "bbb",
},
]
},
{
"shopId": "4",
"shopName": "2",
"address": "bbb",
"contactNumber":"1234"
"images": [
{
"imageId": "3",
"shopId": "4",
"imageUrl": "ccc",
},
{
"imageId": "4",
"shopId": "4",
"imageUrl": "ddd",
},
]
},
]
我得到了值,但在获取值时出现了一些混淆。
答案 0 :(得分:0)
您在这里有两个嵌套的异步任务,parallel
和each
。
Parallel负责获取一个商店的商店信息和图像,并使用包含任务结果的双元素数组调用最终回调。
这是你最终的并行回调:
function(err,data)
{
var result = data.reduce(function(prev, curr) { /*merging the array*/
return prev.concat(curr);
});
console.log(result);
});
data
应该是一个双元素数组,其中元素0是商店,元素1是图像。你只需将它们连接在一起。如果您想要所需格式的图像,则应data[0].images = data[1]
将图像密钥添加到您的商店。
到目前为止,这是一家商店。然后是外部each
循环。您目前没有给出最终回调,也没有对结果做任何事情。
这样的事情:
function listshops(callback)
{
var array=[3,4];/*shopId*/
async.each(array,function(dat,eachCallback){
async.parallel([
function(parallelCallback){
client.connection.query('select * from shop where shopId=?',dat,function(err,data1){
parallelCallback(null,data1);
});
},
function (parallelCallback) {
client.connection.query('select * from image where shopId=?',dat,function(err,data2){
parallelCallback(null,data2);
});
}
],
// this is the final callback for parallel
function(err,parallelResult)
{
// construct one shop
var shop = parallelResult[0];
shop.image = parallelResult[1];
// pass the shop info back as a result to each
eachCallBack(shop);
});
},
// this is the final callback for each
function(err, eachResult) {
// eachResult is an array with the shops returned from parallel callback
var result = {
shops: eachResult
}
return result
}
);
}
我无法测试这个,所以不要认为它是一个确切的解决方案,而是一个解释。我重命名了您的变量以便更好地理解,您不必在代码中执行此操作。要记住的关键是你在这里有两个嵌套的任务,比如一个嵌套循环,你还必须在两个层面上处理结果。