2017-12-27 30 views
0

Ich versuche, das node.js Paket readline zu verwenden, um Benutzereingaben in der Befehlszeile zu erhalten, und ich möchte die eingegebene Eingabe über Versprechen leiten. Die Eingabe kommt jedoch nie durch die Kette. Ich denke, das Problem könnte von der Tatsache herrühren, dass die Versprechen in der Rückrufmethode erfüllt werden, aber ich weiß nicht, wie ich dieses Problem lösen soll.Node.js readline innerhalb von Versprechen

Ein Beispiel für dieses Problem sieht wie folgt aus:

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));

Wenn in node.js ausführen, wird die Frage einmal erscheinen, nach der Eingabe das Programm einfach nicht mehr eingegeben wurde. Ich will, dass es wartet, bis die erste Eingabe eingegeben wurde, dann sollte es diese Eingabe drucken und nach der nächsten Eingabe fragen.

Vielen Dank im Voraus!

+0

Warum versuchen Sie, die gleiche Verheißung wiederzuverwenden, anstatt nur eine neue innerhalb einer 'while' Schleife zu erstellen? Werfen Sie einen Blick auf meine Antwort hier https://Stackoverflow.com/a/46488389/941240 –

Antwort

3

Sobald Ihr Versprechen gelöst ist, gibt es keinen Grund mehr darauf zu warten. Ich habe auch den rl.close() Anruf an das Ende verschoben, da es nur einmal angerufen werden muss.

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() }); 
Verwandte Themen