删除全局变量 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);
});
当它结束时,我需要删除该对象以防止它在超时挂起时一遍又一遍地触发 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);
});
虽然我知道这不是一个正确的答案,但这解决了我的问题。我在群集中运行节点进程并杀死了要删除的所有子进程。这在我的例子中有效,因为孩子们正在执行无休止的任务,当我需要停止它们时,这是我可以中止它们的唯一合乎逻辑的方法。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- nodejs中的Javascript全局变量和属性-全局属性有时会被删除
- nodejs 中的全局变量
- 在 NodeJS 中使用和更新全局变量是否安全?
- NodeJS与AngularJS,所需的HTML文件不是跨控制器的数据绑定全局变量
- 删除全局变量 nodejs
- 不能在 NodeJS MySQL 中使用全局变量
- 存储nodejs fs.readfile's产生一个变量并传递给全局变量
- Nodejs全局变量和模块
- Nodejs:跨多个文件的全局变量
- NodeJS模块中的全局变量