// 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
时间: 2024-10-29 19:06:54