node.js - 模块中的无限循环不工作

标签 node.js node-modules

我正在尝试编写一个每秒运行一些代码的 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

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

编辑1

在方法调用后添加括号

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

关于node.js - 模块中的无限循环不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330164/

相关文章:

javascript - Amazon Alexa Skill Lambda 代码无法执行

javascript - 为需要的 Node 模块创建工厂

node.js - 如何使用kurento在一对一视频通话中录制视频?

javascript - 没有指定路径!无法得到亲戚。 gulp 任务中的 Vinyl-fs 错误

node.js - 查找位置的最佳 node.js 模块?

javascript - 减少 React App 中 0.chunk.js 的加载时间

node.js - 在 ghost 安装中引用 @fontface

javascript - 使用 REGEX 在 Node js 中提取 HTML 文档的 <BODY> 文本

node.js - 包含来自node_module(npm包)的css?

angular - 升级到 native 脚本 8.1.5 后出现节点模块问题