javascript 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;
- }
- 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();
- }