Close stream node.js



我无法关闭node.js中的流,这是我的代码

        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.');
              }
            });

然后我在代码中有这个函数,它删除了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' }

这意味着溪流仍然开放!

.nfs文件是在流传输时创建的,但流关闭后不应该删除该文件吗?

我做错了什么?

在执行删除/解锁操作之前,您必须等待回调关闭才能调用。从你提供的样品来看,情况并非如此。

Node.js运行async,这意味着在流期间删除目录。相反,尝试将删除放在回调中,以便在以下时间之后进行:

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');
        }
      });
    }
  });
});

我在这段代码中也添加了一行分号:)

最新更新