删除全局变量nodejs

时间:2013-10-03 15:30:43

标签: javascript node.js

所以我有一个节点应用程序,当它启动时会创建一个对象。

function my_object(){

}

my_object.prototype.say_lol = function() {
    setTimeout(function(){
        console.log('lol');
    }, 1000);
};


var ping = new my_object();

ping.say_lol();

process.on( 'SIGINT', function() {

    delete global.ping; // Please?


    // pseudo code to go update something in the database or whatever
    setTimeout(function(){
        process.exit();
    }, 4000);

});

当它结束时,我需要删除该对象以防止它在超时挂起时反复触发lol。这有什么优雅的方式吗?

3 个答案:

答案 0 :(得分:3)

您需要捕获setTimeOut返回的id,然后在不想稍后触发时清除它。

my_object.prototype.say_lol = function() {
    return (setTimeout(function(){
        console.log('lol');
    }, 1000));
};

var ping = new my_object();
var timeOutId = ping.say_lol();

process.on( 'SIGINT', function() {
    clearTimeout(timeOutId);
    process.exit();
});

如果事件未被触发,它将被取消。如果它已被解雇,它就会失败。

答案 1 :(得分:0)

我不知道如何阻止回调发射。我的方法是在另一个变量中跟踪ping的状态,并使用if语句包装任何代码块来触发不需要的回调。

function my_object(){ };
var stillHere = true;

my_object.prototype.say_lol = function() {
  setTimeout(function(){
    if(stillHere){  
      console.log('lol');
    }
  }, 2000);
};

var ping = new my_object();
ping.say_lol();

process.on( 'SIGINT', function() {
  delete global.ping; // Please?
  stillHere = false;
  setTimeout(function(){
    process.exit();
  }, 4000);
});

答案 2 :(得分:0)

虽然我明白这不是一个真正的答案,但这解决了我的问题。我在集群中运行节点进程并杀死了我想要删除的所有子节点。这在我的实例中起作用,因为孩子们正在执行无休止的任务,当我需要它们被停止时,这是我可以放弃它们的唯一合乎逻辑的方式。