JavaScript 函数拒绝按顺序执行
Posted
技术标签:
【中文标题】JavaScript 函数拒绝按顺序执行【英文标题】:JavaScript function refuses to execute in order 【发布时间】:2017-05-18 11:23:38 【问题描述】:下面顶部函数中的一个 case 语句不按顺序进行。目前,它直接进入提示,如果您单击取消,则根本不会听到operatorPickup
。如果我输入“police”,我会得到警察记录,它在 当前函数的 end 调用的另一个函数中 并且 then I获取OperatorAnswer
,这完全没有意义,它按照 2、3、1 的顺序进行 - 当 3 甚至不在同一个函数中时!
根据以前的经验,我尝试延迟提示,以防警报、提示或确认阻止 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)
中的 case "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();
【讨论】:
如果我这样做,根本不会播放任何录音,但不会弹出警告框。一切都停止了 这没有意义...您在控制台中有任何错误吗?您是否在var operatorPickup = new Audio('OperatorAnswer.wav');
和operatorPickup.play();
之间添加了事件监听器?
我在 var operatorPickup 定义之前也有它,解决了它!【参考方案2】:
如果单击取消,变量 number
将设置为 null
,这不在 case 语句中。如果您想在 null 和 0 上处理相同的情况,您应该在 case "0"
的上方或下方添加 case null
。如果在下一个 case 之前没有 break
,则 switch 语句将执行下一个 case,依此类推,因此您可以堆叠 case 语句而不会中断应该为任何一种情况执行的代码。
【讨论】:
嗯...我尝试设置 var previousNumber = number 然后在 case 0 运行后将 number 更改为 previousNumber 如果 number 为空...但是 consoleLog 没有报告任何一个...跨度>以上是关于JavaScript 函数拒绝按顺序执行的主要内容,如果未能解决你的问题,请参考以下文章
javascript accumulate():按顺序执行promises或promise-returns函数数组,并使用给定的累加器减少结果