打印预期格式的JSON数组

这是从我的表中获取细节的代码。

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", }, ] }, ] 

我获得了价值观,但是在获取价值观方面有些混乱。

你有两个嵌套的asynchronous任务在这里, paralleleach

并行负责获取店铺信息和一间店铺的图像,并用包含任务结果的两个元素数组来调用最终的callback。

这是你最后的平行callback:

  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循环的外部。 你目前没有给这个最后的callback,也没有对结果做任何事情。

像这样的东西:

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

我无法testing这个,所以不要认为它是一个确切的解决scheme,而是一个解释。 为了更好的理解,我重命名了你的variables,你不必在你的代码中这样做。 要记住的关键是你有两个嵌套的任务,就像一个嵌套的循环,你也必须在两个层面上处理结果。