nodejs:读取form process.stdin并同步执行长期运行的任务。

问题描述 投票:0回答:1

我想创建一个可执行的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的事件处理慢下来,直到我完全处理完前一行为止

node.js asynchronous input async-await stream
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.