사용자 입력을 얻기 위해 블로그에서 여러 가지 기법을 시도했지만 예제는 항상 사용자 입력을 요구하는 프로그램의 컨텍스트에서 수행되었다는 것을 언급하고 싶습니다. 그들은 항상 작동하지만 노드가 없기 때문에 node.js가 다음 코드 행에 계속해서 어떤 문제도 발생하지 않습니다.node.js에서 사용자 입력 대기
내가 사용자 입력을 가져온 다음 입력이 나는이 구조 생성하므로 유효한지 확인해야합니다 :
while (designAppealTest(subject) == false) {
subject[DESIGN_APPEAL] = ei.errorInput('designAppeal for the subject', iteration, subject[DESIGN_APPEAL])
}
가 호출하는 기능은 이것이다 :이 것을 제외하고 작동
module.exports.errorInput = function (fieldName, iteration, originalValue) {
originalValue = originalValue || 'false'
console.log('\n\n' + fieldName + ' for the subject' + ' contains an invalid value in for #' + i)
if (originalValue !== false)
console.log('original value of field = ' + originalValue)
console.log('\nPlease enter a new value for it:\n')
process.stdin.on('data', function (text) {
console.log('received data:', text);
return text;
});
}
사용자가 값을 입력 할 수 있기 전에 while 루프를 계속 진행합니다. 그래서 내가 보는 것은 사용자가 초당 40,000 번 값을 입력하도록 요청하는 것입니다. 루프를 계속하기 전에 값을 입력 할 때까지 node.js를 대기 상태로 만들 수 있습니까? 구조체 자체가 잘못 되었습니까, 아니면 비동기식으로 정지하지 않았기 때문입니까?
CFrei는 :
좋아 나뿐만 아니라 자체 check()
에 콜백을 추가 :
checkedSubject = check(subject, function(v) {
return v;
});
console.log('checkedSubject = ' + checkedSubject)
function check(listing, callback) {
if (designAppealTest(subject) == false) {
ei.errorInput('designAppeal', iteration, listing[DESIGN_APPEAL], function(v) {
listing[DESIGN_APPEAL] = v;
check(listing)
});
} else {
callback(listing);
}
}
을 난 여전히 같은 문제가 받고 있어요 - 그것은 입력을 요구하지만 바로 뒤에 모두를 실행합니다.
살펴 보셔야합니다 터미널로부터의 사용자 입력을 처리하기위한 npm의 기존 모듈. 예로는 [inquirer] (https://github.com/SBoudrias/Inquirer.js)와 [prompt] (https://github.com/flatiron/prompt)가 있습니다. – mscdex
그냥 "프롬프트"모듈을 시도했지만 같은 문제가 발생했습니다 .. 사용자 입력을 기다리지 않고 있습니다 ... 요청할 것입니다. 그러나 바로 다음에 오는 행을 실행하여 아무 것도 입력 할 시간이 없습니다. –