2017-12-27 38 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() });