簡體   English   中英

如何在nodejs中使用異步獲取同步readline或“模擬”它?

[英]How to get synchronous readline, or "simulate" it using async, in nodejs?

我想知道是否有一種簡單的方法來獲得“同步”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) 可以使用 async/await 或生成器

(c) 應該是基於行的

(d) 在處理之前不應要求將整個 stdin 讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

我想知道是否有一種簡單的方法來獲取“同步” 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)不需要在處理之前將整個標准輸入讀入內存

文檔中提供了最簡單(也是首選)的選項。 https://nodejs.org/api/readline.html#rlquestionquery-options-callback

const util = require('util');
const question = util.promisify(rl.question).bind(rl);

async function questionExample() {
  try {
    const answer = await question('What is you favorite food? ');
    console.log(`Oh, so your favorite food is ${answer}`);
  } catch (err) {
    console.error('Question rejected', err);
  }
}
questionExample();

我們可以一起使用promise和process.stdin事件來模擬一個同步輸入系統

const { EOL } = require("os");
const getLine = async () =>
    (
        await new Promise((resolve) => {
            process.stdin.on("data", (line) => {
                resolve("" + line);
            });
        })
    ).split(EOL)[0];

const line = await getLine();
console.log(line);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM