[英]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.