2017-12-06 10 views
0
var fs = require("fs"); 
var inquirer = require("inquirer"); 
var words = ["ALPHA","BRAVO","CHARLIE","DELTA","ECHO","FOXTROT","GOLF","HOTEL","INDIA","JULIET","KILO","LIMA","MIKE","NOVEMBER","OSCAR","PAPA","QUEBEC","ROMEO","SIERRA","TANGO","UNIFORM","VICTOR","WHISKEY","XRAY","YANKEE","ZULU"]; 

function nodeMan() { 
    var wrongs = 0; 
    var lettersGuessed = []; 
    var word = words[Math.floor(Math.random()*words.length)]; 
    var goldenBoy = word.split(""); 
    var blank = "_" * word.length; 

    console.log(blank); 

    for (var i = 0; wrongs < 10; i++) { 
    var neem = "Question " + i; 
    inquirer.prompt([{name: neem, message: "Guess a letter"}]).then(function(response) { 
     console.log("print"); 
     lettersGuessed.push(resposne.name); 
     if (response.name.length < 1 && lettersGuessed.indexOf(response.name)) { 
     console.log(" first if statement cleared"); 
     for (var u = 0; u < goldenBoy.length; u++) { 
      if (goldenBoy[u] === response.name) { 
      blank[u] = response.name; 
      console.log(blank); 
      } 
     } 
     } 
    }) 
    } 
} 
nodeMan(); 

これを非同期に実行しようとしています。 rnの時点で、「文字を推測する」というプロンプトが無限ループします。無関係にではなく、一度に1つの質問を尋ねることを照会者に求める手助けが必要です。御時間ありがとうございます!あなたの質問への応答の内側に、あなたがどうかを判断する必要があります。init NPMにとinquirerプロンプトとループ非同期で実行する方法

+0

ループでは起こりません。あなたは、次の反復のために関数を呼び出すことによって独自のループを作成しなければなりません。 – epascarello

+0

あなたのコードはひどいです。タブのピラミッドを見るだけです。 〜3レベル以上のインデントが表示されると、自動的に不正なコードとなり、書き換えを検討する必要があります。 –

+0

@epascarelloあなたは 'async/await'を使うとできます – charlietfl

答えて

0

クワイアあなたはforループを使用して、再帰を使用する必要がすることはできません忘れないでくださいテストフォルダを設定するには

あなたは別の質問をして同じ質問をもう一度発します(あなたのコールバック内から)。

function nodeMan() 
    const wrong = 0; // Store the number of wrong answers 
    const askQuestion =() => { 
    inquirer.prompt([{name: neem, message: "Guess a letter"}]).then((response) => { 
     // Here check the answer and decide if you want to ask another question 
     // [...] 
     wrong++; 
     // As long as less than 10 wrong answers, ask the question again 
     if (wrong < 10) { 
     // Ask the next question 
     askQuestion(); // Recursion ! 
     } 
    } 
    };                              
} 
nodeMan(); 
+0

forループ 'async/await'を使用する場合 – charlietfl

+1

これは単純です。 OPは矢印関数を使用していません – klugjo

+1

コメントを明確にする* "forループを使用できません" *これはあまりにもずっと前には真実でしたが、これ以上完全には正確ではありません。とにかくこれに再帰的なアプローチを使うほうが良いだろうと同意する – charlietfl

0

をあなたはNodeJS 7.0+の下で、あなたのコードを実行するつもりなら、あなたは"async"関数として関数を宣言してから待つ"await" operatorを使用することができます。ここでは

はあなたが軌道に乗るための基本的なコードの構造ですforループにおける非同期応答。

var fs = require("fs"); 
var inquirer = require("inquirer"); 
var words = ["ALPHA", "BRAVO", "CHARLIE", "DELTA", "ECHO", "FOXTROT", "GOLF", "HOTEL", "INDIA", "JULIET", "KILO", "LIMA", "MIKE", "NOVEMBER", "OSCAR", "PAPA", "QUEBEC", "ROMEO", "SIERRA", "TANGO", "UNIFORM", "VICTOR", "WHISKEY", "XRAY", "YANKEE", "ZULU"]; 

// declare an async function 
async function nodeMan() { 
    var wrongs = 0; 
    var lettersGuessed = []; 
    var word = words[Math.floor(Math.random() * words.length)]; 
    var goldenBoy = word.split(""); 
    var blank = "_" + word.length; 

    console.log(blank); 

    for (var i = 0; wrongs < 10; i++) { 
     var neem = "Question " + i; 
     // wait for asynchronous response 
     var response = await inquirer.prompt([{ 
      name: neem, 
      message: "Guess a letter" 
     }]); 
     console.log(response) 
     console.log("print"); 
     lettersGuessed.push(response.name); 
     if (response.name.length < 1 && lettersGuessed.indexOf(response.name)) { 
      console.log(" first if statement cleared"); 
      for (var u = 0; u < goldenBoy.length; u++) { 
       if (goldenBoy[u] === response.name) { 
        blank[u] = response.name; 
        console.log(blank); 
       } 
      } 
     } 
    } 
} 
nodeMan(); 
関連する問題