2016-02-25 84 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

感謝您的幫助 –