timer._repeat不是一个函数?
节点v4.2.6
我有一个小程序:
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)
怎么回事,我该如何纠正?
这个:
var timer = setInterval(write(),100);
传递write()
的结果作为每100毫秒调用的函数。 write()
不返回一个函数( undefined
隐式返回),所以你得到TypeError
。 相反,传递函数本身:
var timer = setInterval(write,100);