JavaScript函数拒绝按顺序

时间:2017-05-18 11:23:39

标签: javascript

下面顶部函数中的一个case语句不按顺序排列。目前,它会直接显示提示,如果单击“取消”,则根本不会听到operatorPickup。如果我输入警察',我会在当前功能的结束一个不同的功能中进行警察录音我得到OperatorAnswer,这完全没有意义,它是按顺序2,3,1进行的 - 当3甚至不在同一个函数中时!

根据之前的经验,我尝试延迟提示,以防止警报,提示或确认阻止了用户界面并优先使用,但这也没有帮助。

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();
    }

我如何强迫案件" 0"在switch(number)中按顺序执行

2 个答案:

答案 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();

答案 1 :(得分:1)

如果单击“取消”,变量number将设置为null,这不在case语句中。如果要在null和0上转到相同的大小写,则应在case null的上方或下方添加case "0"。如果在下一个案例之前没有break,则switch语句将执行下一个案例,依此类推,因此您可以堆栈案例语句,而不会中断应该针对任何一个案例执行的代码。