// main.js

const cp = require('child_process');
const child = cp.fork('./child.js'); const callbackPool = {}; child.on('message', msg => {
let msgId = msg._id,
cb = callbackPool[msgId]; if (cb) {
cb.resolve(msg);
clearTimeout(cb.timer);
callbackPool[msgId] = null;
}
}); Promise.all([
sendMessage({timeout: 1e3}),
sendMessage({timeout: 2e3}),
sendMessage({timeout: 2e3}),
sendMessage({timeout: 1e3}),
]).then(rv => {
log(rv);
}).catch(err => {
log(err);
}) function sendMessage(msg, cb) {
msg._id = (Math.random() * 1e6) | 0;
child.send(msg);
log('sent', msg);
return new Promise((resolve, reject) => {
let msgId = msg._id,
timer = setTimeout(function() {
let cb = callbackPool[msgId];
if (cb) {
clearTimeout(cb.timer);
callbackPool[msgId] = null;
}
reject('timeout');
}, 5e3);
callbackPool[msgId] = { resolve, reject, timer };
});
} function log(...args) {
args.unshift(new Date().toLocaleString());
console.log.apply(console, args);
}

// child.js

process.on('message', msg => {
doReply(msg);
}); function doReply(msg){
setTimeout(() => {
msg.data = msg._id * 2;
sendMessage(msg);
}, (msg.timeout || 0) * 2);
} function sendMessage(msg){
process.send(msg);
}

  

最新文章

  1. 从配置读取一段时间(TimeSpan)
  2. 在C#中,Json的序列化和反序列化的几种方式总结
  3. font-family 字体
  4. redis事务
  5. 虚拟主机无法使用fsockopen操作处理方法
  6. [SAP ABAP开发技术总结]OK_CODE
  7. 初识数据字典【weber出品必属精品】
  8. C#获取Excel中所有的Sheet名称
  9. css脱离文档流
  10. 使用DbFunctions来解决EF按照日期分组数据
  11. 在block内如何修改block外部变量
  12. KV型内存数据库Redis
  13. [ExtJS6学习笔记]Ext JS6主题系列 (Classic工具包)
  14. 利用post请求发送内容进行爬虫
  15. Lintcode228-Middle of Linked List-Naive
  16. Extracted SQL state class 'S1' from value 'S1009'
  17. tomcat 的acceptCount、acceptorThreadCount、maxConnections、maxThreads 如何确定
  18. 【Android】Android6.0读取通话记录
  19. MySQL大数据量分页性能优化
  20. ubuntu 下执行定时任务

热门文章

  1. Java 前台后台数据传递、中文乱码解决方法
  2. datatable:dt.page(dt.page()).draw(false)
  3. myisam,innodb和memory的区别
  4. mvc中图片的保存和显示
  5. Swift语法快速索引
  6. iOS Programming Recipe 6: Creating a custom UIView using a Nib
  7. 编写高质量代码改善C#程序的157个建议——建议146:只对外公布必要的操作
  8. hibernate:对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决办法
  9. redis----内部数据结构学习
  10. [LeetCode 题解]:Gas Station