javascript - 如何在 Javascript 循环中对事件进行排队

标签 javascript jquery queue

我有一个数组,可以在两个人之间创建对话,在浏览器说话和浏览器监听之间“翻转”。

简短版本,如何创建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 deferredJavascript Q我该怎么办?

最佳答案

您没有创建对象队列,您只是隐藏相同的对象并将其再次插入spokes数组,因此您将在数组内多次获得对象的最后版本。

如果您想创建异步行为,您应该尝试回调而不是简单的 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
    }
];

然后你可以使用filtermap等数组方法来处理你需要的数据。

最后,当应用程序中发生某些事情时,您可以使用事件来触发每次讲话。

关于javascript - 如何在 Javascript 循环中对事件进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862268/

相关文章:

javascript - 在哈希对象上调用 forEach

javascript - 我如何阻止使用 Jquery 加载图像

Python - 线程 - 我可以制作线程队列列表吗?

javascript - OpenUI5 : JS views vs. XML View

javascript - 将一个输入替换为另一个动态创建的输入

javascript - 将所有具有特定标签的元素替换为组件

Java初始值和数组访问基本理解——异常输出

c++ - 线程安全队列有问题吗?

javascript - 如何使用 for 或 while 循环迭代到 100 并使用 javascript 显示每次迭代的总和?

javascript - 在 KineticJS 中检测舞台上的点击而不是形状上的点击