2017-05-18 3 views
-1

以下のトップ関数のcase文の1つが順不同です。現在、プロンプトが表示され、キャンセルをクリックすると、operatorPickupはまったく聞こえません。私は「警察」を入力すると、私はで、それは順序2に起こっている全く意味がありません、私はOperatorAnswerを得る末現在の関数、その後で呼び出される別の関数である警察の記録を取得します、3、1 - 3が同じ関数でさえないとき!JavaScript関数が順番に実行するのを拒否します

以前の経験から、アラート、プロンプト、または確認がUIをブロックして優先された場合にプロンプ​​トを遅らせようとしましたが、それでも役に立たなかったです。

function response() { 
     switch(number) { 
      case "0": 
       var operatorPickup = new Audio('OperatorAnswer.wav'); 
       operatorPickup.play(); 
       setTimeout(function() { 
        number = prompt("Operator, your number please? (Numbers only; enter 'police' for police and emergency)"); 
        number = number; 
        operatorPutCallThrough(); 
       }, 9); 
       break; 
      case "911": 
       var pickup911 = new Audio('911-xxx-fleet.mp3'); 
       pickup911.play(); 
       break; 
      case "18477651008": 
       var pickupMCI = new Audio('MCI.wav'); 
       pickupMCI.play(); 
       break; 
      case "8675309": 
       var pickup8675309 = new Audio('discoornis-bell-f1.mp3'); 
       pickup8675309.play(); 
       break; 
      case "police": 
       break; 
      default: 
       var pickupDefault = new Audio('ldcircuits-bell-f1.mp3'); 
       pickupDefault.play(); 
     } 
    } 
    function operatorPutCallThrough() { 
     if (number == "police") { 
      var operatorPoliceTransfer = new Audio('OperatorPolice.wav'); 
      operatorPoliceTransfer.play(); 
     } 
     response(); 
    } 

どのように私は順序にを実行するswitch(number)場合 "0" を強制することができますか?

答えて

1

play()でイベントリスナーを使用すると、メディアファイルの再生が完了した後にのみプロンプトが表示されます。

私はHTML5のaudioまだのようで働いたことがありませんが、この質問:Detecting when HTML5 audio is finished playing (more than once)?はあなたが試すことができますので、あなたがイベントに耳を傾けることができる方法を示唆:

operatorPickup.addEventListener("ended", function(){ 
    number = prompt("Operator, your number please? (Numbers only; enter 'police' for police and emergency)"); 
    number = number; 
    operatorPutCallThrough(); 
}); 

operatorPickup.play();

+0

これを行うと、録音はまったく再生されませんが、アラートボックスはポップアップしません。すべてがちょうど停止する – InterLinked

+0

意味がない...あなたはコンソールに何かエラーがありますか?あなたは 'var operatorPickup = new Audio( 'OperatorAnswer.wav');と' operatorPickup.play(); 'の間にeventlistenerを追加しましたか? –

+0

私はvar operatorPickupもそれを解決する前にそれを持っていた! – InterLinked

1

BEFORE場合キャンセルをクリックすると、変数numberがケースステートメントにないnullに設定されます。 nullと0で同じケースに移動する場合は、のすぐ上または下にcase nullを追加する必要があります。次のcaseの前にbreakがない場合、switch-statementは次のcaseを実行します。そうすると、case文は、それらのいずれかの場合に実行するコードを改行することなくスタックできます。

+0

うーん... var previousNumber = numberを設定してみた後に、numberがnullの場合、previousNumberに番号を変更して実行した後、consoleLogは何も報告していない... – InterLinked

関連する問題