Я хотел бы создать исполняемый сценарий nodejs, к которому я могу направить ввод и обработать ввод по порядку, но обработка каждой строки - потенциально долго выполняемая задача.
Вот пример установки, с которой я тестирую:
input.txt
test
foo
bar
index. 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
Я понимаю, что это скорее всего потому, что я использую функции asyn c, но мне интересно, как я могу ускорить обработку событий из process.stdin, чтобы дождаться полной обработки предыдущей строки