2016-02-25 47 views
1

返回什么有两个OneDriveGDrive的 文件夹,每个文件夹包含500 文件onedriveUrlsgdriveUrls是分别包含指向这些文件夹的链接的数组lengthNode.JS async.parallel混淆|由async.map

混乱!以下代码预计在2个级别并行运行,第一次在async.parallel,第二次在async.map,这是正确的代码还是async.map应该包装在setTimeout以确保所有级别都平行运行?

async.parallel({ 
     onedrive: function(callback){ 
      async.map(onedriveUrls, request, function(err, results) { 
       if (err) throw(err);   // handle error 
       callback(null,results); 
      }); 
     }, 
     gdrive: function(callback){     
      async.map(gdriveUrls, request, function(err, results) { 
       if (err) throw(err);   // handle error 
       callback(null,results); 
      }); 
     } 
    }, 
    function(err, results) { 
     // results is now equals to: {onedrive: [array_of_length_x], gdrive: [array_of_length_y]} 
    }); 

什么是由async.map返回 - 承诺或什么?

快乐帮助!

+0

*'抛err' *看起来并不像 “*处理错误*” ...... – Bergi

+0

我唯一会改变(超出' throw(err)',可能)使用'async.mapSeries',所以你不会一次发送数百个请求到你的网络服务。 – apsillers

+0

它不是我的服务器的情况下,谷歌可以处理我那么多的请求 –

回答

4

它是一个正确的代码或async.map应该包裹在setTimeout中,以确保所有级别都平行运行?

request预计是异步的,一切都很好。包装setTimeout中的任何内容都无济于事。

什么是由async.map返回 - 承诺或什么?

什么都没有。 map与大多数其他异步函数一样返回undefined,它只调用其结果数组的回调函数。


顺便说一句,你应该简化你的代码

async.parallel({ 
    onedrive: function(callback) { 
     async.map(onedriveUrls, request, callback); 
    }, 
    gdrive: function(callback) { 
     async.map(gdriveUrls, request, callback); 
    } 
}, function(err, results) { 
    … 
}); 
+0

感谢您的帮助 –