关闭流node.js

时间:2016-07-21 10:21:33

标签: javascript node.js fs

我无法关闭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文件是在流式传输时创建的,但是一旦流关闭后不应该删除文件?

我做错了什么?

2 个答案:

答案 0 :(得分:0)

在执行删除/解锁操作之前,您必须等待关闭回调。从您提供的样本看起来并非如此。

答案 1 :(得分:0)

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

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

你也在一行中遗漏了一个分号,我在这段代码中也添加了分号:)