javascript Deferred和递归次数限制实例
你知道Deferred和递归次数限制吗?下面有个不错的实例,大家可以看看
functionrunAsyncTTS(text,speecher,audiopath){ vardef=jQuery.Deferred(); varargs={"SynthText":text,"VoiceSpeecher":speecher,"WordSpeed":"3","UseCSSML":"0","AudioPath":audiopath}; tts.asyncTTS(JSON.stringify(args),function(err,result){ def.resolve(result); }); returndef.promise(); }
functiontextToSpeechBat(metaJson,speecher,audioPath){ vardef=$.Deferred(); varresult={originalWords:"",resultJsonArr:[]}; varjsons=""; for(varindex=0;index<metaJson.words.length;index++){ varaudioName=metaJson.words[index]['audio']; audioName=audioName.replace('.mp3',''); varaudioFile=audioPath+"/"+audioName+'.wav'; varargs='{"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); }); returndef.promise(); }
functiontextToSpeechWithTryTimes(metaJson,speecher,audioPath,times){ vardef=$.Deferred(); varttsRet=null; varttsCallBack=function(index){ if(index<times){ textToSpeechBat(metaJson,speecher,audioPath).done(function(ret){ console.log("textToSpeechWithTryTimes:"+JSON.stringify(ret)); ttsRet=ret; varresultJsonArr=ret.resultJsonArr; varaudioFlag=true; for(vari=0;i<resultJsonArr.length;i++){ if(resultJsonArr[i]==""){ audioFlag=false; break; } varretObj=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("textToSpeechWithTryTimesFail,tryagain!"); ttsCallBack(++index); }else{ console.log("textToSpeechWithTryTimessucceed,return"); def.resolve(ret); } }); } if(index==times){ console.log("textToSpeechWithTryTimestimesover,return"); def.resolve(ttsRet); } }; ttsCallBack(0); returndef.promise(); }