分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

nodejs的process.on('message')转promise

发布时间:2023-09-06 01:41责任编辑:林大明关键词:jsnodejs

// 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);}

  

nodejs的process.on('message')转promise

原文地址:https://www.cnblogs.com/zh33gl/p/8422663.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved