nodejs的process.on('message')转promise
// 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的更多相关文章
- nodejs child process
//Create child processvar thread = require('child_process'); var msg = thread.fork(__dirname + '/chi ...
- 实现nodejs的promises库(基于promise.js改写)
原promise.js库地址:https://github.com/stackp/promisejs promises是JavaScript实现优雅编程的一个非常不错的轻量级框架.该框架可以让你从杂乱 ...
- NodeJs中process.cwd()与__dirname的区别
process.cwd() 是当前执行node命令时候的文件夹地址 ——工作目录,保证了文件在不同的目录下执行时,路径始终不变__dirname 是被执行的js 文件的地址 ——文件所在目录 Node ...
- nodejs之process进程
虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程.node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程( ...
- nodejs的process模块如何获取其他进程的pid
var cmd=process.platform=='win32'?'tasklist':'ps aux'; var exec = require('child_process').exec; var ...
- nodejs中function*、yield和Promise的示例
var co = require("co"); var fs = require("fs"); function cusReadFile(fileName) { ...
- NodeJS API Process全局对象
Process 全局对象,可以在代码中的任何位置访问此对象,使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等 ...
- nodejs(一)process模块
1.process是一个全局进程,你可以直接通过process变量直接访问它. process实现了EventEmitter接口,exit方法会在当进程退出的时候执行.因为进程退出之后将不再执行事件循 ...
- 解决"415 Cannot process the message because the content type 'application/x-www-form-urlencoded' was not the expected type 'text/xml; charset=utf-8'"
wcf basicHttpBinding content-type text/xml;charset=utf-8 wsHttpBinding 'application/soap+xml; ch ...
随机推荐
- 白盒测试实践-任务进度-Day03
所使用静态代码检查工具 阿里巴巴Java开发代码检测IDE插件 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 任务进度 经过前期的学习和会议筹备,今天我们小组召开了代码评审会议.以下是今天 ...
- web测试——完结感言
1.在小组所有成员一人找出了博客园的2个小bug. 2.杨瑞丰与李建文完成了用户调研和定量评价. 3.张颖与汪鸿也完成了产品分析和与CSDN的横向比较. 4.胡俊辉一个人总结所有人的问题与结果,进行了 ...
- HDU 1104 Remainder (BFS求最小步数 打印路径)
题目链接 题意 : 给你N,K,M,N可以+,- ,*,% M,然后变为新的N,问你最少几次操作能使(原来的N+1)%K与(新的N)%k相等.并输出相应的操作. 思路 : 首先要注意题中给的%,是要将 ...
- Windows装python
pycharm常用快捷键ctr+alt+shift+l可以快速格式化python安装下载地址https://www.python.org/downloads/release/python-365/ 一 ...
- 关于HTTP协议传输与接收数据的相关内容
第一篇: HTTP请求报文和HTTP响应报文 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/28/2612910.html 第二篇: 深入浅出U ...
- zTree动态加载
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" ...
- WPF 实现INotifyPropertyChanged .Net Framework 4.5
自己动手写了一个基类来实现INotifyPropertyChanged接口,以后可以直接使用. using System.ComponentModel; using System.Runtime.Co ...
- 8 个用于生产环境的 SQL 查询优化调整
在没有数据仓库或单独的分析数据库的组织中,报告的唯一来源和最新的数据可能是在现场生产数据库中. 在查询生产数据库时,优化是关键.一个低效的查询可能会对生产数据库产生大量的资源消耗,如果查询有错误会引发 ...
- 「HNOI 2013」数列
题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令 ...
- python index()函数
python内置index()函数 index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python ...