[英]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.