我正在節點中創建一個命令行工具。用戶輸入特定命令後,我將解析他們輸入的選項。從Node.js中的問題陣列創建一系列提示
> mycommand init --name name --email [email protected]
然後驗證選項的值。驗證之後,我生成一系列問題,這些問題未從用戶輸入的選項以及未通過驗證的輸入選項中回答。一旦陣列已經產生的,我循環通過它並給出提示針對每個問題:
for(var i = 0; i < questions.length; i++) {
var prop = questions[i],
title = messages.prompts.init[prop].question,
def = messages.prompts.init[prop].def,
input = read.createInterface(process.stdin, process.stdout);
if(messages.prompts.init[prop].hasOwnProperty('format')){
title = title + ' <' + messages.prompts.init[prop].format + '> ';
}
input.question(title + ' (' + def + ')', function (a) {
//dosomething(a);
process.exit();
});
}
的問題是,在代碼循環通過整個陣列,而不等待用戶輸入,並與最終的提示顯示結束來自數組中最後一項的消息。當我嘗試鍵入響應時,每個按鍵都會乘以數組中的項目數。例如,嘗試輸入「MYNAME」的結果:
> Enter Your Name (none): mmmmyyyynnnnaaaammmmeeee
我已經試過多個節點模塊包括read和prompt和我experienceing同樣的問題,所以我不能完全理解命令行工具如何讀取用戶輸入。
任何有關如何解決這個問題的意見,將不勝感激。
謝謝。
這是完美的。謝謝你的回答和明確的解釋。 – 2014-11-01 21:39:14