Apakah Anda tahu batas yang ditangguhkan dan rekursi? Ada contoh yang bagus di bawah ini, Anda bisa melihatnya
fungsi runasynctts (teks, speecher, audiopath) {var def = jQuery.Deferred (); var args = {"synthtext": text, "voicespeecer": speecher, "wordspeed": "3", "usecssml": "0", "audiopath": audiopath}; tts.asynctts (json.stringify (args), function (err, hasil) {def.resolve (hasil);}); return def.promise (); } fungsi texttospeechbat (Metajson, speecher, audiopath) {var def = $ .deferred (); var result = {originalwords: "", resultjsonarr: []}; var jsons = ""; untuk (indeks var = 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']+'", "voicespeecer": "'+speecer+'", "wordspeed": "3", "usecssml": "0", "audiopath": "+audiofile+'" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "Audiofil+'" " jsons + = args + "|"; } jsons = jsons.substr (0, jsons.length-1); tts.asyncttsbat (jsons, function (err, ret) {result ['resultjsonarr'] = ret.split ('|'); def.resolve (hasil);}); return def.promise (); } fungsi texttospeechwithtryTimes (Metajson, speecher, audiopath, time) {var def = $ .deferred (); var ttsret = null; var ttscallback = function (index) {if (index <Times) {texttospeechbat (metajson, speecher, audiopath) .done (function (ret) {console.log ("TextTospeechWithTimes:"+json.stringify (rets); ttsret = ret; varjsonarr (varsulr = retringify (rets); ttsret = retjsonryryTimes: "+json.stringify (ret); ttsret = ret; varjsonarr (varsulr. i = 0; i resultjsonarr.length; i ++) {if (resultjsonarr [i] == "") {audiOflag = false; retobj ['hasilnya'] == "") {audioflag = false break; def.resolve (ret);}}); } if (index == kali) {console.log ("TextTospeechWithtryTimes Timesover, return"); def.resolve (ttsret); }}; ttscallback (0); return def.promise (); }