删除全局变量 nodejs

Delete global variables nodejs

本文关键字:nodejs 全局变量 删除      更新时间:2023-09-26

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

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。有什么优雅的方法可以做到这一点吗?

您需要捕获 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();
});

如果事件尚未触发,则事件将被取消。如果它已经触发,它会静默失败。

我不知道

有什么方法可以阻止回调触发。我的方法是在另一个变量中跟踪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);
});

虽然我知道这不是一个正确的答案,但这解决了我的问题。我在群集中运行节点进程并杀死了要删除的所有子进程。这在我的例子中有效,因为孩子们正在执行无休止的任务,当我需要停止它们时,这是我可以中止它们的唯一合乎逻辑的方法。