簡體   English   中英

刪除全局變量nodejs

[英]Delete global variables nodejs

所以我有一個節點應用程序,當它啟動時會生成一個對象。

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

});

當結束時,我需要刪除該對象,以防止在超時未決時一遍又一遍地大聲笑。 有什么優雅的方法嗎?

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

盡管我知道這不是一個真正的答案,但這解決了我的問題。 我在群集中運行了節點進程,並殺死了我想要刪除的所有子級。 在我的情況下,這是可行的,因為孩子們正在執行無盡的任務,而當我需要將其停止時,這是我中止他們的唯一合乎邏輯的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM