JavaScript, Node.js で、標準入力した数値を変数に代入したい
解決したいこと
JavaScript, Node.jsでconsole上で入力した数値を変数に代入したいです。
Pythonのinput( )
のような挙動を取ってほしいと考えています。
この記事と同様の挙動を、JavaScript, Node.js にて再現することを目的としています。
該当するソースコード
const readline = require('readline/promises');
async function input(name) {
const readInterface = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let string = await readInterface.question(name)
readInterface.close();
return string
}
let a = Number(input('数値1>'));
let b = Number(input('数値2>'));
console.log(a);
console.log(b);
このようなコードを記述しました
a = int(input('数字1>'))
b = int(input('数字2>'))
print(a)
print(b)
Pythonでこのように記述した場合と同様の挙動を取ってほしいと考えています。
発生している問題・エラー
async / await
で今回定義した関数は、非同期処理をさせているはずですが、
let a = Number(input('数値1>'));
let b = Number(input('数値2>'));
console.log(a);
console.log(b);
この部分が一度に実行されてしまっています。
また、関数が二重に実行されており、上の画像では1を一度だけ入力したにも関わらず、2回入力されています。
補足
Promise
でのコードを記述した場合、下記のように2つの変数への代入自体はできていますが、別の値を入力することはできていません。
コードの書きやすさを考えて、できればasync / await
での実装と、変数への代入ができればと考えています。
const readline = require('readline');
const inputString = prompt =>{
const readInterface = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
return new Promise( resolive =>readInterface.question(prompt,
inputString=>{
readInterface.close();
resolive( inputString);
}));
};
const st_1 = async()=>{
const string_1 = await inputString("文字列1 >");
console.log( string_1 );
}
st_1();
const st_2 = async()=>{
const string_2 = await inputString("文字列2 >");
console.log( string_2 );
}
st_2();