ネストされたifステートメントを使用して、最高レベルのifを終了するにはどうすればよいですか?

ジョートレイナー

HTML5音声認識APIを試して、画面に表示された内容をログに記録しています。他の単語を拾うために最初に言わなければならないキーワードがあるので、それはAppleのSiriのように機能します。「OK、Google」と言うと、さらに2つの単語を聞き取り、それを聞くと画面に出力します。コードの動作は次のようになります。

  • 「OK、Google」を聞いてください
  • 聞いたことを記録し、新しい単語を探して新しい機能を開きます
  • 「15」または「30」と聞こえた場合は、画面に印刷してください
  • 「Finished」という単語が聞こえたら、関数を終了し、両方のifステートメントを終了します

現時点では、最初の関数しか終了できず、両方のifステートメントを終了することはできません。「Finished」という言葉を言っても、「15」または「30」と言って画面に印刷することはできますが、「Finished」と言った後、この2つの数字を画面に印刷することはできません。 。2つの数字を言う前に、もう一度「OK、Google」と言わなければならないようにしてください。

これがコードです、誰かが助けてくれることを願っています。前もって感謝します。

recognition.onresult = function(event){
  var resultsLength = event.results.length -1 ;
  var ArrayLength = event.results[resultsLength].length -1;
  var Word = event.results[resultsLength][ArrayLength].transcript;
  console.log(Word);
  if (Word.indexOf('okay', 'google') != -1) {
    test.style.borderColor = "white";
    recognition.onresult = function(event){
      var resultsLength = event.results.length -1 ;
      var ArrayLength = event.results[resultsLength].length -1;
      var Word = event.results[resultsLength][ArrayLength].transcript;
      console.log(Word);
      document.getElementById('test').value = Word;
      if (Word.indexOf('15') != -1) {
        test.innerHTML = '15';
      }
      if (Word.indexOf('30') != -1) {
        test.innerHTML = '30';
      }
      if (Word.indexOf('finished') != -1) {
        test.style.borderColor = "black";
        return;
      }
    }
  }
}
クリス

投稿したコードの8行目で、ハンドラー関数をrecognition.onresultに割り当てます。

recognition.onresult = function(event){
   // content removed
}

問題は、「終了」という言葉を聞いたときに、このハンドラーをまったく削除または置換しないことです。次回イベントが発生すると、まったく同じハンドラーが再び起動し、単語を出力します。

「finished」という単語が聞こえたら、onresultハンドラーを別の値に設定する必要があります。

if (Word.indexOf('finished') != -1) {
    recognition.onresult = function(event){
        // do something different now that we've heard "Finished"
    }
    test.style.borderColor = "black";
    return;
}

説明した内容から、最初の関数(1行目で割り当てたコード全体)をハンドラーに再度割り当てる必要があることに注意してください。これは非常に複雑で困難になり始めています。これは、一方が他方の内側にネストされた2つの無名関数を処理していて、内側の関数内から外側の関数を割り当てたいためです。

この場合、これらの無名関数を分割して名前を付け、recognition.onresultに繰り返し割り当て/再割り当てできるようにすると、コードがはるかに読みやすくなります。

これは完全な実装ではなく、以下をテストしていませんが、以下が意味をなすかどうかを確認してください。

recognition.onresult = listenForOkayGoogle;

function listenForOkayGoogle(event) {
   var Word = ...;
   if (Word.indexOf('okay', 'google') != -1) {
      recognition.onresult = listenForNumbersUntilFinished;
   }
}

function listenForNumbersUntilFinished(event) {
   var Word = ...;
   if (Word.indexOf('15') != -1) {
      // print it
   }
   if (Word.indexOf('30') != -1) {
      // print it
   }
   if (Word.indexOf('finished') != -1) {
      recognition.onresult = listenForOkayGoogle;
   }
}

まず、listenForOkayGoogleをハンドラーとして割り当てます。イベントが発生するたびに、このハンドラーが起動し、魔法の言葉の1つが話されたかどうかを確認し、話された場合、ハンドラーをlistenForNumbersUntilFinishedに置き換えます。これで、イベントが発生するたびに、そのハンドラーが代わりに起動します。単語が関連する番号の1つと一致する場合は、それを印刷します。代わりに「finished」という単語と一致する場合は、listenForOkayGoogleハンドラーを再度割り当てます。ここでは、実質的に戦略パターンを使用しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネストされたテンプレートパラメータを使用してクラスを作成するにはどうすればよいですか?

分類Dev

ネストされたforループでcontinueステートメントのようなものを使用するにはどうすればよいですか?

分類Dev

ネストされた「if」ステートメントを使用してコードの重複を減らすにはどうすればよいですか?

分類Dev

PHPを使用してネストされたテーブルをWebスクレイピングするにはどうすればよいですか?

分類Dev

ネストされたifステートメントを使用してUML図を描画するにはどうすればよいですか?

分類Dev

find()ネストされたドキュメントを2つ以上のレベルで使用するにはどうすればよいですか?

分類Dev

2つのネストされたループを終了するにはどうすればよいですか?

分類Dev

Pythonのジェネレーターを使用してネストされたforループを作成するにはどうすればよいですか?

分類Dev

Forループ内でネストされたIf-Elseステートメントを使用するにはどうすればよいですか?[Javascript]

分類Dev

ネストされたモーダルを使用しているときに、テンプレート内のDjangoメッセージを区別するにはどうすればよいですか?

分類Dev

ネストされたifステートメントの代わりにオプションを使用するにはどうすればよいですか?

分類Dev

PHP MySQLのwhileループ内でネストされたステートメントを実行するにはどうすればよいですか?

分類Dev

これらのネストされたifステートメントをよりエレガントに書くにはどうすればよいですか?

分類Dev

これらのネストされたifステートメントをよりエレガントに書くにはどうすればよいですか?

分類Dev

ネストされたリソースレールを使用して削除ルートを追加するにはどうすればよいですか4

分類Dev

SQL Serverのwhileループでselectステートメントを使用してレコードを取得するにはどうすればよいですか?

分類Dev

ネストされたループを使用してこのパターンを逆にするにはどうすればよいですか?

分類Dev

ネストされたforループを使用して、Pythonで次のパターンを出力するにはどうすればよいですか?

分類Dev

ネストされたリストを使用して水平カレンダーを作成するにはどうすればよいですか?

分類Dev

文字列を分割してマルチレベルのネストされた辞書を作成するにはどうすればよいですか?

分類Dev

Enzyme Shallowを使用して子コンポーネントに渡された小道具をテストするにはどうすればよいですか?

分類Dev

ビルダーパターンを使用してネストされたリストを作成するにはどうすればよいですか?

分類Dev

Google Apps Marketplace v2-テストインストールを使用して、GAMv2で作成されたプロジェクトを別のテストドメインでテストするにはどうすればよいですか?

分類Dev

mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

分類Dev

Springを使用してmongodbドキュメントのネストされた配列にjsonを追加するにはどうすればよいですか?

分類Dev

Bootstrapのカルーセルコンポーネントを使用して、オーバーレイされたテキストではなく画像の不透明度を変更するにはどうすればよいですか?

分類Dev

IE 10、11。プレースホルダーを使用したテキスト入力からフォーカスの入力イベントがトリガーされないようにするにはどうすればよいですか?

分類Dev

ネストされたルートを使用して、react-router-v4で前のルートのコンテンツを削除せずにページにコンテンツを追加するにはどうすればよいですか?

分類Dev

ネストされたリストの要素をトップレベルに取得するためにforループを使用しないようにするにはどうすればよいですか?

Related 関連記事

  1. 1

    ネストされたテンプレートパラメータを使用してクラスを作成するにはどうすればよいですか?

  2. 2

    ネストされたforループでcontinueステートメントのようなものを使用するにはどうすればよいですか?

  3. 3

    ネストされた「if」ステートメントを使用してコードの重複を減らすにはどうすればよいですか?

  4. 4

    PHPを使用してネストされたテーブルをWebスクレイピングするにはどうすればよいですか?

  5. 5

    ネストされたifステートメントを使用してUML図を描画するにはどうすればよいですか?

  6. 6

    find()ネストされたドキュメントを2つ以上のレベルで使用するにはどうすればよいですか?

  7. 7

    2つのネストされたループを終了するにはどうすればよいですか?

  8. 8

    Pythonのジェネレーターを使用してネストされたforループを作成するにはどうすればよいですか?

  9. 9

    Forループ内でネストされたIf-Elseステートメントを使用するにはどうすればよいですか?[Javascript]

  10. 10

    ネストされたモーダルを使用しているときに、テンプレート内のDjangoメッセージを区別するにはどうすればよいですか?

  11. 11

    ネストされたifステートメントの代わりにオプションを使用するにはどうすればよいですか?

  12. 12

    PHP MySQLのwhileループ内でネストされたステートメントを実行するにはどうすればよいですか?

  13. 13

    これらのネストされたifステートメントをよりエレガントに書くにはどうすればよいですか?

  14. 14

    これらのネストされたifステートメントをよりエレガントに書くにはどうすればよいですか?

  15. 15

    ネストされたリソースレールを使用して削除ルートを追加するにはどうすればよいですか4

  16. 16

    SQL Serverのwhileループでselectステートメントを使用してレコードを取得するにはどうすればよいですか?

  17. 17

    ネストされたループを使用してこのパターンを逆にするにはどうすればよいですか?

  18. 18

    ネストされたforループを使用して、Pythonで次のパターンを出力するにはどうすればよいですか?

  19. 19

    ネストされたリストを使用して水平カレンダーを作成するにはどうすればよいですか?

  20. 20

    文字列を分割してマルチレベルのネストされた辞書を作成するにはどうすればよいですか?

  21. 21

    Enzyme Shallowを使用して子コンポーネントに渡された小道具をテストするにはどうすればよいですか?

  22. 22

    ビルダーパターンを使用してネストされたリストを作成するにはどうすればよいですか?

  23. 23

    Google Apps Marketplace v2-テストインストールを使用して、GAMv2で作成されたプロジェクトを別のテストドメインでテストするにはどうすればよいですか?

  24. 24

    mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

  25. 25

    Springを使用してmongodbドキュメントのネストされた配列にjsonを追加するにはどうすればよいですか?

  26. 26

    Bootstrapのカルーセルコンポーネントを使用して、オーバーレイされたテキストではなく画像の不透明度を変更するにはどうすればよいですか?

  27. 27

    IE 10、11。プレースホルダーを使用したテキスト入力からフォーカスの入力イベントがトリガーされないようにするにはどうすればよいですか?

  28. 28

    ネストされたルートを使用して、react-router-v4で前のルートのコンテンツを削除せずにページにコンテンツを追加するにはどうすればよいですか?

  29. 29

    ネストされたリストの要素をトップレベルに取得するためにforループを使用しないようにするにはどうすればよいですか?

ホットタグ

アーカイブ