我如何在Javascript循环中排队事件
How do I queue events in a Javascript Loop
我有一个数组,它创建了两个人之间的对话,它在浏览器说话和浏览器倾听之间"翻转"。
简而言之,我如何使saySomething
队列
for(var i=0; i < speaks.length; i++) {
saySomething(speaks[i]); // saySomething should wait for the previous loop to complete
}
长版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
最初我有一个递归循环移动数组,并做了与上面相同的事情,但我认为这种方式可能更容易控制队列。要么用jQuery递延,要么用Javascript,我该怎么做呢?
您不是在创建对象队列,您只是在阴影相同的对象并将其再次推入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
来处理你需要的数据。
最后,当应用程序中发生某些事情时,您可以使用事件来触发每次说话。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 以PubSub/Observer模式对事件进行排队
- 有没有一种方法可以将我的JS函数排队到JSF事件队列中
- HTML Javascript 事件已排队
- React在状态更改时丢弃排队的事件
- 防止事件处理程序排队
- 如何使用 Move.js 防止排队或禁用点击事件
- 事件未正确排队
- Backbone.js:如何将挂起的同步事件排队到服务器
- 如何防止启动排队的事件回调
- 我如何在Javascript循环中排队事件
- jQuery取消先前排队的事件处理程序来重新启动CSS动画
- 如何阻止单击事件在多次单击时排队
- 排队等待旧的单击事件值