2017-12-27 39 views
0

node.jsパッケージのreadlineを使ってコマンドラインでユーザー入力を取得しようとしています。入力した入力を約束してパイプしたいと思っています。しかし、入力は決して連鎖を経由しません。私はこの問題は、コールバックメソッドで約束が果たされたという事実から来ると思うが、私はその問題を解決する方法を知らない。Node.js約束の中のreadline

この問題の例は次のようになります。Node.jsの中で実行する場合

import rlp = require('readline'); 
 

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

 
let prom = new Promise((fulfill, reject) => { 
 
    rl.question('Enter input: ', input => rl.close() && fulfill(input)); 
 
}); 
 

 
prom.then(result => {console.log(result); return prom}) 
 
    .then(result => {console.log(result); return prom}) 
 
    .then(result => console.log(result));

、質問は入力プログラムがちょうど停止して入力された後、一度表示されます。最初の入力が入力されるまで待ってから、この入力を印刷して次の入力を求めます。

ありがとうございます!

+0

「while」ループ内に新しいものを作成するのではなく、まったく同じ約束事を再利用しようとしているのはなぜですか?私の答えはここを見てくださいhttps://stackoverflow.com/a/46488389/941240 –

答えて

3

約束が解決されたら、もう一度それを待つことはありません。私はまた、rl.close()コールを最後に移動しました。これは、一度だけ呼び出す必要があるためです。

const rlp = require('readline'); 

const rl = rlp.createInterface({ 
     input: process.stdin, 
     output: process.stdout 

}); 

function ask() { 
    return new Promise((resolve, reject) => { 
     rl.question('Enter input: ', (input) => resolve(input)); 
    }); 
} 

ask() 
.then((result) => { console.log(result); return ask(); }) 
.then((result) => { console.log(result); return ask(); }) 
.then(result => { console.log(result); rl.close() });