fs.write中的回调不能用作文档

时间:2011-10-08 10:36:22

标签: node.js

作为node.js文档

  

fs.write(fd,buffer,offset,length,position,[callback])

所以我写道:

var fs = require('fs');

fs.open('./example.txt', 'a', 0666, function(err, fd) {
  if (err) { throw err; }
  console.log('file opened');
  fs.write(fd, 'test', null, null, null, function(err) {
    if (err) { throw err; }
    console.log('file written');
    fs.close(fd, function() {
      console.log('file closed');
    });
  });
});

但是没有触发fs.write的回调。输出只是'文件打开'。

fs.write(fd, 'test', null, null, function(err) {

但是我为第5个参数指定了回调而不是第6个。这是有效的。 为什么不同于文档。

并且在节点源(node_file.cc)中,回调是第6个参数。

 Local<Value> cb = args[5];

我不明白。

2 个答案:

答案 0 :(得分:4)

仍然支持fs.write的旧接口。它允许写入字符串。因为你给了一个字符串而不是'Buffer'节点,试图使你的参数适合这个旧的接口:

fs.write(fd, data, position, encoding, callback)

请注意,较旧的界面将'callback'作为第5个参数。对于第五个参数,你给它'null':

fs.write(fd, 'test', null, null, null, function(err) {

节点为你的回调看到'null',所以不认为你给了节点一个回调。

使用建议的Buffer数据字符串,或正确使用旧接口使用普通字符串。如果您现在还没准备好使用Buffer,只需使用“new Buffer('test')”,直到您准备好。

答案 1 :(得分:3)

您需要将buffer而不是字符串作为第二个参数传递给fs.write。此外,回调将给出三个参数,而不是一个:

var buffer = new Buffer('test');
fs.write(fd, buffer, 0, buffer.length, null, function(err, written, buffer) {

来自documentation

  

fs.write(fd,buffer,offset,length,position,[callback])

     

将缓冲区写入fd。

指定的文件      

offset和length确定要写入的缓冲区部分。

     

position指的是应该写入此数据的文件开头的偏移量。如果position为null,则数据将写入当前位置。见pwrite(2)。

     

回调将被赋予三个参数(错误,写入,缓冲),其中written指定从缓冲区写入的字节数。

最后,对fs.open的调用中的'0666'表示UNIX file mode