最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - timer._repeat is not a function? - Stack Overflow

programmeradmin5浏览0评论

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?

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?

Share Improve this question asked Mar 8, 2016 at 0:06 user773737user773737 2
  • 1 You should be passing write not write() to setInterval(). That's not the immediate problem; what is "timers.js"? – Pointy Commented Mar 8, 2016 at 0:09
  • @Pointy oh yeah. Good spot – user773737 Commented Mar 8, 2016 at 1:01
Add a ment  | 

1 Answer 1

Reset to default 16

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);
发布评论

评论列表(0)

  1. 暂无评论