timer._repeat不是函数吗?

问题描述:

节点v4.2.6timer._repeat不是函数吗?

我有一个小节目:

var chokidar = require('chokidar'); 
var _ = require('lodash'); 
var q = require('q'); 
var fs = require('fs'); 
var faker = require('faker'); 
var file = 'testfile.txt'; 
var pending = ''; 
var writer; 

fs.open(file,'w+',function(){ 
    writer = fs.createWriteStream(file); 

    writer.on('error',function(err){ 
     console.log(err); 
    }); 

    writer.on('drain',rewrite); 

    var timer = setInterval(write(),100); 
}); 

function write(){ 
    var data = faker.Helpers.createCard(); 
    console.log('attempting to write ' + Buffer.byteLength(data,'utf8') + ' bytes'); 
    var ok = writer.write(data.toString()); 
    if(!ok){ 
     console.log('buffer full, saving in memory'); 
     pending += data; 
    }else{ 
     console.log('written'); 
    } 
} 

function rewrite(){ 
    console.log('buffer empty, writing ' + Buffer.byteLength(data,'utf8') + ' bytes from memory'); 
    var ok = writer.write(pending); 
    if(!ok){ 
     console.log('buffer full again. Saving in memory again'); 
     pending += data; 
    } 
} 

之后将其写入文件中的前几个字节,它的错误了与:

timers.js:275 
    timer._repeat(); 
     ^

TypeError: timer._repeat is not a function 
    at wrapper [as _onTimeout] (timers.js:275:11) 
    at Timer.listOnTimeout (timers.js:92:15) 

什么错和我该如何纠正它?

+1

您应该将'write'而不是'write()'传递给'setInterval()'。这不是直接的问题;什么是“timers.js”? – Pointy

+0

@有点哦,是的。好点 – Houseman

此:

var timer = setInterval(write(),100); 

正在通过结果的write()作为函数每100毫秒被调用。 write()不返回一个函数(undefined隐式返回),所以你得到TypeError。相反,通过函数本身:

var timer = setInterval(write,100);