使用Promise实现Node.js标准输入读取
在Node.js中,从标准输入读取有多种方法,如使用fs模块的readFileSync函数从/dev/stdin读取,或使用readline模块进行读取等。
我试过使用Promise处理process.stdin的实现。
function read() {
return new Promise((resolve, reject) => {
let buffer = '';
process.stdin
.resume()
.setEncoding('utf8')
.on('readable', () => {
while ((chunk = process.stdin.read()) !== null) {
buffer += chunk;
}
})
.on('end', () => resolve(buffer));
});
};
在使用时,请使用 async await :
function doSomething(input) {
console.log(input);
}
(async () => {
const input = await read();
doSomething(input);
})();
回拨电话可能比想象中好一些吧。
如果我们可以通过生成器逐行返回,而不是将数据全部加载到缓冲区中,那样会更好。