javascript中Deferred与递归次数限制的例子

发布时间:2020-08-10编辑:脚本学堂
在javascript中,Deferred和递归次数是有限制的,以前真不知道,看了本文提供的例子,理解了Deferred和递归次数限制的应用技巧,需要的朋友参考下。

1、Deferred和递归次数限制

复制代码 代码示例:

function runAsyncTTS(text,speecher,audiopath) {
var def = jquery.Deferred();
var args = {"SynthText": text, "VoiceSpeecher": speecher, "WordSpeed": "3", "UseCSSML": "0", "AudioPath": audiopath};
 
tts.asyncTTS(JSON.stringify(args),function(err,result) {
def.resolve(result);
});
 
return def.promise();
}

function textToSpeechBat(metaJson, speecher, audioPath) {
var def = $.Deferred();
var result = {originalWords:"", resultJsonArr:[]};
var jsons="";
for(var index=0;index < metaJson.words.length;index++) {
var audioName = metaJson.words[index]['audio'];
audioName = audioName.replace('.mp3','');
var audioFile = audioPath +"/" + audioName + '.wav';
var args = '{"SynthText": "'+metaJson.words[index]['word']+'", "VoiceSpeecher": "'+speecher+'", "WordSpeed": "3", "UseCSSML": "0", "AudioPath": "'+audioFile+'"}';
jsons += args + "|";
}
jsons = jsons.substr(0,jsons.length-1);
tts.asyncTTSBat(jsons,function(err,ret) {
result['resultJsonArr'] = ret.split('|');
def.resolve(result);
});
return def.promise();
}

function textToSpeechWithTryTimes(metaJson, speecher, audioPath,times) {
var def = $.Deferred();
var ttsRet = null;
var ttsCallBack = function(index) {
if(index < times) {
textToSpeechBat(metaJson,speecher,audioPath).done(function (ret) {
console.log("textToSpeechWithTryTimes:"+JSON.stringify(ret));
ttsRet = ret;
var resultJsonArr = ret.resultJsonArr;
var audioFlag = true;
for(var i=0;i<resultJsonArr.length;i++) {
if(resultJsonArr[i] == "") {
audioFlag = false;
break;
} // www.jb200.com
var retObj = JSON.parse(resultJsonArr[i]);
console.log(retObj['audioFlag']);
if(retObj['audioFlag'] == 'false' || retObj['result']=="") {
audioFlag = false;
break;
}
}
console.log(audioFlag);
if(audioFlag == false) {
console.log("textToSpeechWithTryTimes Fail, try again!");
ttsCallBack(++index);
}else {
console.log("textToSpeechWithTryTimes succeed,return");
def.resolve(ret);
}
});
}
 
if(index == times) {
console.log("textToSpeechWithTryTimes timesover,return");
def.resolve(ttsRet);
}
};
 
ttsCallBack(0);
return def.promise();
}