nodejs的process.on('message')转promise
2024-09-01 10:43:24
// 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);
}
最新文章
- 从配置读取一段时间(TimeSpan)
- 在C#中,Json的序列化和反序列化的几种方式总结
- font-family 字体
- redis事务
- 虚拟主机无法使用fsockopen操作处理方法
- [SAP ABAP开发技术总结]OK_CODE
- 初识数据字典【weber出品必属精品】
- C#获取Excel中所有的Sheet名称
- css脱离文档流
- 使用DbFunctions来解决EF按照日期分组数据
- 在block内如何修改block外部变量
- KV型内存数据库Redis
- [ExtJS6学习笔记]Ext JS6主题系列 (Classic工具包)
- 利用post请求发送内容进行爬虫
- Lintcode228-Middle of Linked List-Naive
- Extracted SQL state class 'S1' from value 'S1009'
- tomcat 的acceptCount、acceptorThreadCount、maxConnections、maxThreads 如何确定
- 【Android】Android6.0读取通话记录
- MySQL大数据量分页性能优化
- ubuntu 下执行定时任务
热门文章
- Java 前台后台数据传递、中文乱码解决方法
- datatable:dt.page(dt.page()).draw(false)
- myisam,innodb和memory的区别
- mvc中图片的保存和显示
- Swift语法快速索引
- iOS Programming Recipe 6: Creating a custom UIView using a Nib
- 编写高质量代码改善C#程序的157个建议——建议146:只对外公布必要的操作
- hibernate:对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决办法
- redis----内部数据结构学习
- [LeetCode 题解]:Gas Station