2016-03-08 13 views
7

nodo v4.2.6timer._repeat non è una funzione?

Ho un piccolo programma:

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

Dopo che scrive i primi byte al file, esso errori fuori con:

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) 

cosa sta andando male e come posso correggerlo?

+1

Si dovrebbe passare 'write' not' write()' a 'setInterval()'. Questo non è il problema immediato; che cos'è "timers.js"? – Pointy

+0

@Pointy oh si. Buon posto – Houseman

risposta

16

Questo:

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

sta passando il risultato della write() come funzione da chiamare ogni 100 millisecondi. write() non restituisce una funzione (undefined viene restituito implicitamente), quindi si ottiene TypeError. Invece, passare la funzione stessa:

var timer = setInterval(write,100);