gpt4 book ai didi

javascript - 如何一次读取一行并将其分配给 NodeJS 中的变量?

转载 作者:行者123 更新时间:2023-12-01 04:05:11 27 4
gpt4 key购买 nike

node.js有没有简单的方法做这样的事情,即一个函数,例如 readline精确读取 stdin 中的一行并返回一个字符串?

let a = parseInt(readline(stdin));
let b = parseFloat(readline(stdin));

我不想读取整行 block 并逐行解析它,例如使用 process.stdin.on("data")rl.on("line") .

http://stackoverflow.com/questions/20086849/how-to-read-from-stdin-line-by-line-in-node 提供的答案中,每一行都由同一个功能 block 处理,我仍然无法在读取一行时将每一行分配给一个变量。

var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(line){
console.log(line);
})

最佳答案

很明显,从流中读取一行无论如何都将是一个异步操作。 (因为您不知道该行何时实际出现在流中)。因此,您应该处理回调/ promise 或生成器。当读取发生时,您会得到该行(在回调中,作为 .then 中返回的值,或者如果您使用生成器,则只需将其分配给您想要的变量)。

因此,如果您可以选择使用 ES6 并使用“co”之类的东西来运行生成器,那么您可以尝试一下。

const co = require('co');
//allows to wait until EventEmitter such as a steam emits a particular event
const eventToPromise = require('event-to-promise');
//allows to actually read line by line
const byline = require('byline');
const Promise = require('bluebird');

class LineReader {
constructor (readableStream) {
let self = this;

//wrap to receive lines on .read()
this.lineStream = byline(readableStream);

this.lineStream.on('end', () => {
self.isEnded = true;
});
}

* getLine () {
let self = this;

if (self.isEnded) {
return;
}

//If we recieve null we have to wait until next 'readable' event
let line = self.lineStream.read();
if (line) {
return line;
}

yield eventToPromise(this.lineStream, 'readable');

//'readable' fired - proceed reading
return self.lineStream.read();
}
}

我用它来运行它以进行测试。

co(function *() {
let reader = new LineReader(process.stdin);

for (let i = 0; i < 100; i++) {
//You might need to call .toString as it's a buffer.
let line = yield reader.getLine();
if (!line) {break;}

console.log(`Received the line from stdin: ${line}`);
}
});

如果您使用 koa.js(基于生成器的类似 Express 的框架),它肯定可以开箱即用

如果你不想要 ES6,你可以在裸 Promise 上做同样的事情。事情将会是这样的。 http://jsbin.com/qodedosige/1/edit?js

关于javascript - 如何一次读取一行并将其分配给 NodeJS 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com