JavaScript Deferred与递归次数限制实例
作者:异步漫步时间:2026-10-28 15:04:54浏览:273
本文介绍如何在JavaScript中使用Deferred对象处理异步操作,并结合递归与次数限制机制优化批量语音合成任务的执行流程,通过多次重试确保最终结果获取。
JavaScript Deferred与递归次数限制实例
你是否了解如何在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();
}
作者最新文章
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
