当前位置: 首页 > 面试题库 >

如何在nodejs中获取同步readline或使用异步“模拟”它?

刘狐若
2023-03-14
问题内容

我想知道是否有一种简单的方法来获取“同步” readline或至少在node.js中获得同步I / O的外观

我用这样的东西,但是很尴尬

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

var i = 0;
var s1 = '';
var s2 = '';

rl.on('line', function(line){
    if(i==0) { s1 = line; }
    else if(i==1) { s2 = line; }
    i++;
})

rl.on('close', function() {
    //do something with lines
})'

取而代之的是,我希望它像这样简单

var s1 = getline(); // or "await getline()?"
var s2 = getline(); // or "await getline()?"

有用的条件:

(a)建议不要使用外部模块或/ dev / stdio文件句柄,我正在向代码提交网站提交代码,但这些代码在那儿不起作用

(b)可以使用异步/等待或生成器

(c)应基于行

(d)不需要在处理之前将整个标准输入读入内存


问题答案:

我想这就是你想要的:

const readline = require('readline');

const rl = readline.createInterface({ input: process.stdin , output: process.stdout });

const getLine = (function () {
    const getLineGen = (async function* () {
        for await (const line of rl) {
            yield line;
        }
    })();
    return async () => ((await getLineGen.next()).value);
})();

const main = async () => {
    let a = Number(await getLine());
    let b = Number(await getLine());
    console.log(a+b);
    process.exit(0);
};

main();

注意:此答案使用实验性功能,并且需要Node v11.7



 类似资料:
  • 我意识到这是一个基本问题,但我没能在别处找到答案。 是

  • 我正在为一家德国公司评估Dart,将各种Java程序移植到Dart,并对结果进行比较和分析。在浏览器中,飞镖轻松获胜。对于服务器来说,软件性能似乎是一个严重的问题(请看我的这个问题),但这基本上得到了缓解。 现在我正在移植一些“简单”的命令行工具,我没想到会有任何严重的问题,但至少有一个问题。一些工具确实会发出HTTP请求来收集一些数据,独立的Dart虚拟机只以异步方式支持它们。纵观所有我能找到的

  • 问题内容: 如何模拟使用一个本地协程到另一本地协程的异步调用? 我目前有一个很尴尬的解决方案: 然后 这可行,但看起来很丑。有更多的pythonic方法可以做到这一点吗? 问题答案: 解决方案实际上非常简单:我只需要将模拟方法转换为协程: 完美运行,当调用模拟时,代码接收本地协程 用法示例:

  • 用mockito模仿异步(< code>@Async)方法的最好方法是什么?提供以下服务: 莫基托的验证如下: 测试方法上面将始终抛出: 如果我从方法中删除,则不会发生上述异常。 Spring Boot版本:1.4.0.RELEASE Mockito版本:1.10.19

  • 问题内容: 我在互联网上读过有关回调的信息,但就我而言我还是听不懂。 我具有此功能,并且在运行时会记录到控制台。但是,现在我需要在另一个功能中使用此响应,而我正在努力做到这一点。 这是我应该得到的地方:(这显然不起作用,因为它不等待响应。) 我真的很难把头放在回调上,我在这里盯着自己瞎了。 问题答案: 回调无法返回值,因为它们将要返回的代码已经执行。 因此,您可以做几件事。一个传递回调函数,异步函

  • 问题内容: 我想知道配置模块导出的最佳方法是什么。在下面的示例中,“ async.function”可以是FS或HTTP请求,为示例起见简化了该请求: 这是示例代码(asynmodule.js): 如何仅在执行异步回调后导出模块? 编辑 有关我的实际用例的简短说明:我正在编写一个模块,用于在fs.exists()回调中配置nconf(https://github.com/flatiron/ncon