我只想提一提,我嘗試了一些來自博客的技術來獲取用戶輸入,但這些示例總是在只需要用戶輸入的程序的上下文中進行......並且它們總是可以工作,但是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循環。所以我看到的是提示要求用戶輸入每秒40000次的值。在繼續循環之前,如何讓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)和[提示](https://github.com/flatiron/prompt)。 – mscdex 2014-09-13 17:26:42
我只是嘗試了「提示」模塊,但我遇到了同樣的問題..它不會等待用戶輸入...它會詢問它,但立即執行下一行,因此沒有時間輸入任何內容。 – 2014-09-13 19:15:55