timer._repeat is not a function?

2019-06-16 21:56发布

node v4.2.6

I have a small program:

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

After it writes the first few bytes to the file, it errors out with:

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)

What's going wrong and how can I correct it?

1条回答
疯言疯语
2楼-- · 2019-06-16 22:20

This:

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

is passing the result of write() as the function to be called every 100 milliseconds. write() doesn't return a function (undefined is implicitly returned), so you get the TypeError. Instead, pass the function itself:

var timer = setInterval(write,100);
查看更多
登录 后发表回答