当所有异步处理程序完成时执行javascript函数
Executing javascript function when all async-handlers completed
例如,在SIGINT处理程序中,我需要等待所有子进程完成。但是在子进程的'close'事件上可能有处理程序,这些处理程序本身可能执行异步操作,如外部通知。
所以我需要等到
- 孩子。关闭和
- 孩子。关闭处理程序完成,
- 在child中启动异步操作。关闭的处理程序全部完成。
下面是简化的当前代码,它只知道第二个检查点。
var child_process = require('child_process');
var events = require('events');
var timers = require('timers');
var childRunning = false; // has child flag (counter in actual app)
// starting child
var child = child_process.spawn(process.cwd()+'/stub.js',{detached:true});
childRunning = true;
child.on('close',function(){childRunning=false}); //
// example close handler with async action inside
// actually there is a bunch of such handlers
child.on('close',function(){
console.log('child close handler triggered');
timers.setTimeout(function(){
console.log('close handler async action completed')
}, 2000);
});
process.on('SIGINT',function(){
console.log("Received SIGINT");
closeApp=function(){
console.log("readyToExit");
process.exit();
}
if (!childRunning) closeApp();
// in fact, i need here not this event, but
// 'all close handlers are done their job'
child.once('close',closeApp);
})
// actually there is a daemon app, so it does not stop by itself at all
在这个例子中,通常你会看到"close handler async action completed"消息,但是如果你按ctrl+c,那么这个消息将会错过。所以我需要把它重写为se
我正试图找到一个解决方案,使近距离处理程序尽可能简单。我不知道如何命名这种情况,所以谷歌没有帮助。
一个可能的解决方案是使用一些扩展的EventEmitter
- 可以处理事件监听器返回的承诺
- 为收集的承诺实现类似
Q.all()
的行为 - 在所有监听器完成(包括等待承诺)时发出另一个事件
我会尝试在npm注册表中找到这样的,或者如果没有找到,我会自己实现一个
相关文章:
- 在操作完成时执行函数
- jQuery无法正确完成提交,并在提交时执行意外操作
- 当 document.ready 中的函数完成时执行 js 函数
- 当一系列 jquery ajax 调用完成时执行一个函数(!)
- 创建一个超链接(或按钮),用于执行 python 脚本,然后在脚本完成时重定向
- 当第一个函数完成没有回调参数时执行第二个函数
- 在上一个函数完成时执行 JavaScript 函数
- 如何在 knex 事务完成时执行操作
- 使用 jQuery 完成单独函数时执行警报
- 如何将 Google 地方自动完成功能配置为仅在输入字段中至少有 n 个字母时执行请求
- 在函数完成时执行代码
- 如何限制keypress/keyup/keydown操作并仅在ajax调用完成时执行
- 如何在打印完成或取消时执行某些JavaScript
- AjaxControlToolkit自动完成:如何自动使用值并在选择值时执行某些操作
- AJAX调用未完成时停止执行JS函数
- jQuery -当所有Ajax请求完成时执行一些操作
- 如何仅在前一个单击完成时执行下一个单击
- Jquery:在一个函数完成时执行另一个函数
- 当嵌套异步函数完成时执行某些操作
- 当所有异步处理程序完成时执行javascript函数