使用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);
})();

回拨电话可能比想象中好一些吧。

如果我们可以通过生成器逐行返回,而不是将数据全部加载到缓冲区中,那样会更好。

广告
将在 10 秒后关闭
bannerAds