我想创建一个可执行的nodejs脚本,我可以用管道输入,并按顺序处理输入,但处理每一行的工作是一个潜在的长期运行任务。
下面是我正在测试的一个例子。
input.txt
test
foo
bar
索引.js
#!/usr/bin/env node
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin
});
async function longRunningFunction(line) {
process.stdout.write(`Beginning long running task for line: ${line}\n`);
return new Promise(function (resolve) {
setTimeout(function () {
resolve(`processed line: ${line}\n`);
}, 1000);
});
}
rl.on('line', async (line) => {
const processedLine = await longRunningFunction(line);
process.stdout.write(processedLine);
})
但当我运行 head input.txt | ./index.js
行没有按顺序处理。
Beginning long running task for line: test
Beginning long running task for line: foo
Beginning long running task for line: bar
processed line: test
processed line: foo
processed line: bar
我知道这很可能是因为我使用的是async函数,但我想知道如何才能让process.stdin的事件处理慢下来,直到我完全处理完前一行为止