2017-05-12 108 views
0
asyncroniosly套管錯誤

我試圖在Node.js的異步重命名一堆預先生成的測試文件(1000+)重命名多個文件中的Node.js

的代碼如下所示:

const fs = require('fs') 
const { each } = require('async') 

each(files, file => { 
    let newfile = 'new' + file 
    fs.rename(file, newfile, err => { 
    err ? console.log(err) : console.log('renamed') 
    } 
}) 

這將導致以下錯誤:

Uncaught Error: ENOENT: no such file or directory, lstat '8d3320e35d22772f' at fs.lstatSync (fs.js:902:18) at Object.fs.lstatSync

這不是async模塊的問題,因爲與當地forEach更換each導致同樣的錯誤。此外,使用同步版本的重命名fs.renameSync時不存在任何問題。

我認爲它試圖移動一些文件兩次左右,但無法確定究竟在哪裏犯錯。做了這個假設,因爲所有的文件都已經成功地重命名了,並且很可能在之後生成錯誤。有人可以建議是什麼造成這種行爲?

+0

你可以顯示什麼'文件'數組看起來像?這個數組中的示例文件路徑是怎樣的? – forrert

+0

感謝您的快速響應。文件數組很好。重命名'fs.renameSync'的同步版本沒有問題。更新了問題。 –

+0

我敢肯定,'fs.rename()'不使用'fs.lstatSync()'。這真的是唯一正在運行的代碼嗎? – robertklep

回答

0

我的壞。以防萬一有人好奇,這個錯誤來自下面的基本功能:

function rmDir(dir) { 

    var list = fs.readdirSync(dir); 

    for(var i = 0; i < list.length; i++) { 
     var dirOrFile = path.join(dir, list[i]); 
     var stat = fs.lstatSync(dirOrFile); 

     if(dirOrFile == "." || dirOrFile == "..") { 
      // pass these files 
     } else if (stat.isDirectory()) { 
      // rmdir recursively 
      rmDir(dirOrFile); 
     } 
//  else { fs.unlinkSync(dirOrFile) }     // rm fiilename 
    } 
    fs.rmdirSync(dir); 
}