closuresstreamnode.js

我无法closuresnode.js中的stream,这是我的代码

var inp = fs.createReadStream("a/b/c/"+ Name); var out = fs.createWriteStream("a/b/c/"+ Name); inp.pipe(out); inp.close( function(err){ if (err){ console.log(err); } else { inp.unpipe(out); socket.emit('Done',{'Name':name}); console.log('There will be no more data.'); } }); 

然后我有这个function进一步在我的代码删除目录的inp目录

 var fse = require("fs-extra"); fse.emptyDir("a/b/c/", function(err){ if(err){ console.log(err); } else { console.log("doneaaaa") fse.remove("a/b/c",function(err){ if(err){ console.log(err); } else { console.log('doneaswell'); } }); } }); 

我得到这个错误!

 doneaaaa { [Error: EBUSY: resource busy or locked, unlink 'a/b/c/.nfs000000002ab5000d00000072'] errno: -16, code: 'EBUSY', syscall: 'unlink', path: 'a/b/c/.nfs000000002ab5000d00000072' } 

这意味着stream仍然是开放的!

.nfs文件在创build时正确的stream,但不应该文件删除一旦closuresstream?

我究竟做错了什么 ?

在执行删除/解锁操作之前,您必须等待callbackclosures才能被调用。 从你提供的样品看来,这不是这样的情况。

Node.js运行asynchronous,这意味着在stream中删除目录occours。 请尝试将删除放在callback中,以便在以下情况发生:

 var inp = fs.createReadStream("a/b/c/"+ Name); var out = fs.createWriteStream("a/b/c/"+ Name); inp.pipe(out); inp.close( function(err){ if (err){ console.log(err); } else { inp.unpipe(out); socket.emit('Done',{'Name':name}); console.log('There will be no more data.'); } var fse = require("fs-extra"); fse.emptyDir("a/b/c/", function(err){ if(err){ console.log(err); } else { console.log("doneaaaa"); fse.remove("a/b/c",function(err){ if(err){ console.log(err); } else { console.log('doneaswell'); } }); } }); }); 

你也错过了我在这个代码中添加的一行上的分号:)