如何在Javascript循环中对事件进行排队
我有一个数组,它可以在两个人之间创建对话,在说浏览器和听浏览器之间“翻转” 简短的版本,如何让如何在Javascript循环中对事件进行排队,javascript,jquery,queue,Javascript,Jquery,Queue,我有一个数组,它可以在两个人之间创建对话,在说浏览器和听浏览器之间“翻转” 简短的版本,如何让说点什么排队 for(var i=0; i < speaks.length; i++) { saySomething(speaks[i]); // saySomething should wait for the previous loop to complete } for(变量i=0;i
说点什么
排队
for(var i=0; i < speaks.length; i++) {
saySomething(speaks[i]); // saySomething should wait for the previous loop to complete
}
for(变量i=0;i
长版本
var speak = {}; var speaks = [];
speak.utter = "What do they call a quarter pounder with cheese in Paris?"
speak.speaker = true;
speaks.push(speak);
var speak = {};
speak.utter = "They don't call it a quarter pounder with cheese?"
speak.speaker = false;
speak.time = 3; // listen for 3 seconds
speaks.push(speak);
var speak = {};
speak.utter = "They got the metric system. They call it a Royale with cheese"
speak.speaker = true;
speaks.push(speak);
for(var i=0; i < speaks.length; i++) { //foreach better?
var speak = speaks[i];
if(speak.speaker)
speakThePhrase(speak); // uses SpeechSynthesisUtterance
else
listenAndCompare(speak); // uses webkitSpeechRecognition
// don't attempt to speak while listening is happening and vice-versa
}
doSomethingElse(); don't process this till old the speaking/listening is done
var speak={};var=[];
speak.utter=“在巴黎,人们把四分之一磅的奶酪面包叫做什么?”
speak.speaker=true;
说话。推(说话);
var speak={};
speak.utter=“他们不叫它四分之一磅奶酪?”
speak.speaker=false;
speak.time=3;//听3秒钟
说话。推(说话);
var speak={};
speak.utter=“他们有公制。他们称之为奶酪皇室”
speak.speaker=true;
说话。推(说话);
对于(var i=0;i
最初我有一个递归循环来移动数组,并执行与上面相同的操作,但我认为这种方法可能更容易控制队列。因此,使用或如何执行此操作?您并不是在创建对象队列,而是对相同的对象进行阴影处理,然后将其再次推入speaks数组,因此您将在数组中多次获得对象的最新版本 如果要创建异步行为,应该尝试回调,而不是简单的
for
循环
最好是这样做:
var speak = [
{
utter: "What do they call a quarter pounder with cheese in Paris?",
speaker: true
},
{
utter: "They don't call it a quarter pounder with cheese?",
speaker: false,
time: 3
},
{
utter: "They got the metric system. They call it a Royale with cheese",
speaker: true
}
];
然后您可以使用数组方法,如filter
和map
来处理所需的数据
最后,当应用程序中发生某些事情时,您可以使用事件触发每次讲话。不管实际问题如何,请注意:您不断更改同一对象(
speak
),将其推到数组上不会生成副本!语音合成API调用(听ONED)然后。对不起,你能澄清一下吗。每次使用var speak={}
将speak推入speak数组时,speak都会被重置(这是编辑)。因此,speaks
数组包含短语,回调在speakThePhrase
和listedandcompare
函数中。数组中的每个对象都将引用相同的数据,您没有使用push方法创建对象的副本,您只是在更改内存中数据的引用。使用此小提琴,可以显示正确的语句。我不确定我是否理解这个问题。查看我的最新评论,也许可以帮助你理解我关于如何创建对象的想法。谢谢-我很感激。但是我仍然不知道您创建的var speak
与我的示例中的var speak
有什么不同。(实际上,speaks数组可以是任意长度的,因为它是从HTML中的对话中获取的)。