node process全局对象

本文深入探讨Node.js中process.nextTick方法的使用,解析其在事件队列和微任务中的高优先级特性,展示如何通过该方法控制异步代码执行顺序,以及在实际编程中如何结合fs模块和事件处理实现灵活的IO操作。
摘要由CSDN通过智能技术生成

process.nextTick(callback)

  • 事件队列 微任务中优先级最高的方法
  • 将事件变为异步,且优先级最高,每次事件轮循后,先执行
  • nextTick会阻塞任何I/O 操作,优先级最高
//微任务中优先级最高,可以优先执行某方法
console.log('开始');

setTimeout(() => {
    console.log('setTimeout')
}, 0);

process.nextTick((a)=>{
    console.log(a);
},'nextTick')

console.log('结束')

执行结果
1090764-20181118230705069-1485224438.png

同步变异步,且异步中优先执行,可以明确执行顺序

const fs=require('fs')
const maybeTrue = Math.random() > 0.5; //决定maybeSync方法中cb的调用方式

maybeSync(maybeTrue, () => {
  foo();
});

bar();
// foo()  bar()执行顺序不确定,由maybeTrue决定

function maybeSync(arg, cb) {
    //arg true和false随机,导致cb执行,可能是同步的,也可能是异步的
    if (arg) {
      // cb(); //同步
      process.nextTick(cb); // 将cb的执行变为绝对异步,且优先级最高的异步
      return;
    } 
    fs.stat(__filename, cb); //异步调用
}

function foo(){
    console.log("foo")
}

function bar(){
    console.log("bar")
}

process.stdin & process.stdout

  • 都是net.Socket双向流,指向文件时,时可读/可写流
  • 可以调用emit,on 方法来触发和处理事件。
  • stdin.read() 读取输入数据
  • stdin.write(str) 向写/输出数据
  • process.stdin.pipe(process.stdout) 直接将输入流pipe到输出流,功能输出输入的数据
  • process.stdin.on('readable',cb) 连续输入,只是可读状态的判断
  • process.stdin.on('data',(chunk)=>{}) 回车键认为一块内容输入完成,chunk为接收到的数据
  • process.stdin.on('end',cb) 输入结束判断,直接回车\n,需将输入数据截取调右边的\n后,若为空,则process.stdin.emit('end')触发end事件
  • 旧模式下,stdin是暂停的,需要先执行process.stdin.resume()来恢复。新版本不用
    将输入内容输出,直接回车,认为输入结束,输出end
var stdin=process.stdin;
var stdout=process.stdout;
stdin.setEncoding('utf8');
//readable 可以输入
//'旧模式'下,stdin流,默认是暂停的,需通过stdin.resume()来恢复
stdin.on('readable',()=>{
    let chunk=stdin.read();
    //处理\n 将回车键的编码删除
    if(typeof chunk === 'string'){
        chunk = chunk.slice(0,-2);
    }
    //未输入数据时,触发end事件,注意:process.stdin 
    if(chunk == ''){
        stdin.emit('end');
        return;
    }
    //非空时,输出数据
    if(chunk!==null){
        stdout.write(`data:${chunk}`)
    }
})

stdin.on('end',()=>{
    stdout.write('end');
})

两数相加 data分次接收数据

let num1,num2;
let stdin=process.stdin;
let stdout=process.stdout;

stdout.write('请输入一个数字:');
//data 每次回车键,触发一次
stdin.on('data',(chunk)=>{
    if(!num1){
        num1=Number(chunk);
        stdout.write('请输入另一个数字:')
    }else{
        num2=Number(chunk);
        stdout.write('和是:'+(num1+num2));
    }
})

process.cwd() 返回当前工作目录

  • current working directory
console.log(process.cwd());
//E:\JavaScript\知识点\12_process全局对象

转载于:https://www.cnblogs.com/tianxiaoxiao/p/9980329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值