【发布时间】:2015-09-30 09:14:14
【问题描述】:
我有一个数组可以创建两个人之间的对话,它在浏览器说话和浏览器收听之间“翻转”。
短版,如何让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 deferred 或Javascript Q 我该怎么做呢?
【问题讨论】:
-
不管实际问题如何,请注意:您不断更改同一个对象 (
speak),将其推送到数组不会复制! -
Promisify 语音合成API调用(听onend)然后queue them in a loop。
标签: javascript jquery queue