node.js从控制台中获取数据

node.js从控制台中获取数据

成品代码

//该方法需要返回一个Promise对象
function consoleScanner(){
    return new Promise((resolve,reject)=>{
        //打开流
        process.stdin.resume();
        //监听输入事件
        process.stdin.on('data',chunk=>{
            //得到数据
            resolve(chunk);
        })
    })
}

//由于await只能在被async修饰函数中执行所以可以将之前得代码用函数进行包裹
async function main(){
    console.log('请输入您的名字');
    var username = await consoleScanner();
    console.log('您的名字是:'+username);
}

//执行
main();

效果如下:
20230223215024

涉及知识

实现上面的代码主要涉及了3个知识

  1. process
  2. Promise
  3. async和await

process

process是一个全局变量,不需要require就可以直接使用,它里面包含众多的系统进程信息,包括进程号,node版本,目录等等。
在这里主要提及两个属性

  1. process.stdout 标准输出流
process.stdout.write('Hello')	//效果:从控制台上输出Hello

通过process.stdout.write方法可以实现和console.log()相同的效果
实际上,console.log的底层就是由process封装而成
2. process.stdin 标准输入流

//默认情况下流是关闭的,需要监听处理输入流数据,首先要开启输入流
process.stdin.resume();
//监听用户输入的数据,当用户输入数据时就会触发
process.stdin.on('data',chunk=>{
    console.log('您输入了:'+chunk);
})

结果:
20230223213041
仅仅是这些代码,并不能让我们随心所欲的在代码的任意地方去获取用户输入的值
因为这其间存在着一个异步的问题
要获取控制台的值就必须对用户的输入进行等待
而Promise+async+await的结合就能很好的做到这一点

知识点小复习

如果await修饰了Promise对象,则需要等待Promise获取到结果之后代码才会据需执行
await只能在被async修饰的函数中使用

首先我们可以将出入事件监听包装成一个Promise函数

function consoleScanner(){
    return new Promise((resolve,reject)=>{
        //打开流
        process.stdin.resume();
        //监听输入事件
        process.stdin.on('data',chunk=>{
            //得到数据
            resolve(chunk);
        })
    })
}

接着写一个入口函数用async修饰

//由于await只能在被async修饰函数中执行所以可以将之前得代码用函数进行包裹
async function main(){
    console.log('请输入您的名字');
    var username = await consoleScanner();
    console.log('您的名字是:'+username);
}
mian();

这样就达到了我们想要的效果
20230223215024

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值