nodejs: читать форму process.stdin и синхронно выполнять длительные задачи - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы создать исполняемый сценарий 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, чтобы дождаться полной обработки предыдущей строки

...