• node process全局对象


    process.nextTick(callback)

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

    执行结果

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

    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) 输入结束判断,直接回车 ,需将输入数据截取调右边的 后,若为空,则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();
        //处理
     将回车键的编码删除
        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全局对象
    
  • 相关阅读:
    JavaScript系列:JavaScript简介
    Fit自适应布局
    JavaScript数值类型及变量
    表格列Column
    JavaScript系列:ECMAScript引用类型
    Absolute绝对定位
    JavaScript系列:ECMAScript运算符
    JavaScript系列:ECMAScript类型转换
    jQuery Uploadify在ASP.NET MVC3中的使用
    JavaScript系列:ECMAScript语句
  • 原文地址:https://www.cnblogs.com/tianxiaoxiao/p/9980329.html
Copyright © 2020-2023  润新知