2016-03-08 3 views
7

Knoten v4.2.6timer._repeat ist keine Funktion?

Ich habe ein kleines Programm:

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

Nachdem er die ersten paar Bytes in die Datei, es Fehler heraus mit schreibt:

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) 

, was falsch läuft und Wie kann ich das korrigieren?

+1

Sie sollten 'write' nicht' write() 'in' setInterval() 'übergeben. Das ist nicht das unmittelbare Problem; Was ist "timers.js"? – Pointy

+0

@ Pointy oh ja. Gute Stelle – Houseman

Antwort

16

Dies:

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

passiert das Ergebnis von write() als die Funktion alle 100 Millisekunden aufgerufen werden. write() gibt keine Funktion zurück (undefined wird implizit zurückgegeben), so erhalten Sie die TypeError. Übergeben Sie stattdessen die Funktion selbst:

var timer = setInterval(write,100);