2016-06-21 131 views
0

我必須異步複製大量的文件(如25000)。我正在使用這個庫:https://github.com/stephenmathieson/node-cp使用nodejs複製大量文件?

這是我的代碼:

  for(var i = 0; i < 25000; i++){ 
      cp(origin[i], dest[i], function(err){ 
       console.log("successfully copied") 
      }) 
     } 

在完成循環,但它好好嘗試複製每一個項目。 「成功複製」被稱爲6000到8000次之間。之後,它不再複製。它與內存或異步任務的限制有關?

任何幫助,將不勝感激!

回答

2

複製函數需要一個回調,這通常是一個很好的線索,它是異步的。這意味着即使副本尚未完成,for循環仍將繼續運行,這意味着您只需排隊25,000次複製操作!

有幾種方法可以解決這個問題,但最常見的方法是使用async模塊。

var async = require('async'); 
async.forEachOf(origin, function (file, i, callback) { 
    cp(file, dest[i], function(err){ 
     callback(); 
    }); 
}) 

這會不會繼續循環的下一個迭代,直到callback被調用。

+0

謝謝你,但我也試過 '異步'。現在我試了你的代碼:'console.log(orig.length +「」+ dst.length); async.forEachOf(原稿,功能(文件,I,回調){ CP(文件,DST [I],函數(ERR){ 的console.log( 「完成」) 回調();} ) ; })' orig.length和dest.length打印20000,但是'finished'會再次打印7000到9000次。之後,它什麼都不做:( –

+0

@ OscarJ.Irun嗯,似乎你用於複製操作的模塊並不是非常流行或維護得很好,也許嘗試使用這個線程中列出的方法之一?http:// stackoverflow.com/questions/11293857/fastest-way-to-copy-file-in-node-js – Harangue

+0

我也嘗試了另外一個https://github.com/sindresorhus/cp-file,但是這次複製之後它會停止4000和5000個文件,也嘗試過你提供的鏈接,但它並不拷貝一半的文件:(。 –

0

可以異步複製此,

var fs = require('fs-extra') 

fs.copy('/tmp/myfile', '/tmp/mynewfile', function (err) { 
    if (err) return console.error(err) 
    console.log("success!") 
}) // copies file 

fs.copy('/tmp/mydir', '/tmp/mynewdir', function (err) { 
    if (err) return console.error(err) 
    console.log('success!') 
}) // copies directory, even if it has subdirectories or file 

資訊=>https://www.npmjs.com/package/fs-extra