模块中的无限循环不工作



我正在尝试编写一个每秒运行一些代码的Node模块:

function worker() {
}
worker.prototype.process = function(callback) {
    console.log("doing the job");
    callback();
}
worker.prototype.query_process = function(callback) {
    console.log("query_process called");
    this.process(function() {
        console.log("Process callback called");
        setTimeout(function() { this.query_process }, 1000);
    });
}
worker.prototype.start = function() {
    this.query_process();
}
module.exports = worker;

我是这样使用的:

var worker = require('./lib/worker');
var worker = new worker();
worker.start();

以下是运行脚本时的输出:

& node workerTest.js 
query_process called
doing the job
Process callback called

为什么这不是在无限循环中运行

EDIT1

在方法调用后添加括号

setTimeout(function() { this.query_process() }, 1000);

但现在出现了这个错误:

/Users/dhrm/Development/project/lib/worker.js:14
        setTimeout(function() { this.query_process() }, 1000);
                                     ^
TypeError: undefined is not a function
    at null._onTimeout (/Users/dhrm/Development/project/lib/worker.js:14:32)
    at Timer.listOnTimeout (timers.js:110:15)
   setTimeout(function() { this.query_process }, 1000);

您不再呼叫this.query_process。在其后面添加括号以调用函数。


编辑响应:

您还需要保存上下文以便在回调中使用:

worker.prototype.query_process = function(callback) {
    var me = this;
    console.log("query_process called");
    this.process(function() {
        console.log("Process callback called");
        setTimeout(function() { me.query_process() }, 1000);
    });
}

最新更新