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();
    }
时间: 2024-10-10 09:47:45

javascript Deferred和递归次数限制的相关文章

函数递归时,递归次数到900多时,就是抛出异常exception RuntimeError(&#39;maximum recursion depth exceeded&#39;,)

import subprocess import multiprocessing import urllib import sys import os import pymongo import signal import time client=pymongo.MongoClient("192.168.139.143",27017) db=client.domaindb collection=db.domain def getdomain(i): print("proces

python递归次数和堆栈溢出问题

在做递归的时候,测试了一下python的递归能力. 如果不设置递归次数的话,大概只能在992次左右,就会出现错误:RuntimeError: maximum recursion depth exceeded 如果使用代码: import sys sys.setrecursionlimit(1000000) #例如这里设置为一百万 设置了递归次数,到了9656次就会出现stack overflow的问题.查了一下,如果换成64位的python会好点.但是做递归容易引起溢出这个问题还是听蛋疼的,数据

关于递归次数的计算

有这样一个题目: 递归函数: 1 int x(int n) 2 { 3 if(n<=3) 4 { 5 return 1; 6 } 7 else 8 { 9 return x(n-2)+x(n-4)+1; 10 } 11 } 计算x(x(8))递归调用次数. 大多数可能觉得这是一个很简单的题目,的确很简单. 但是要想在没有编译器的情况下正确的算出这个递归 调用次数其实还是需要点耐心. x(x(8))我们先计算x(8),我们用count=0计数递归调用次数 1.x(8)=x(6)+x(4)+1 co

JavaScript中的递归

JavaScript递归 1.递归定义 递归函数是在一个函数通过名字调用自身的情况下构成的,如下: 1 function factorial(num) { 2 if (num<=1){ 3 return 1 4 } 5 else{ 6 return num * factorial(num-1) 7 } 8 } 上述函数表明上没有任何问题,但是下面的代码会导致它出错: 1 var anotherFactorial = factorial 2 factorial = null 3 console.l

javascript实现非递归--归并排序

另一道面试题是实现归并排序,当然,本人很不喜欢递归法,因为递归一般都是没有迭代法好.所以首选都是用迭代法,但是迭代法确实是难做啊,至底而上的思想不好把握. 这是我的实现代码 /* * * 非递归版归并排序,思路如下: * 至底而上的思路,二和一,四和一,最后是一半一半和整. * 循环从左到右依次执行,为了节省空间,我节省了右序列,将原数列的一部分作为右小序列,这一部分不会被覆盖. * 作者:吴伟欣 * */ function mergeSearch(arr) { var len = arr.le

JavaScript函数之递归

递归 递归的本质就是使用函数自身来解决问题的思路. 递归的定义(摘): 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合.一般来说,递归需要有边界条件.递归前进段和递归返回段.

JavaScript实现网站访问次数统计代码

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 <script type="text/javascript"> var caution=f

python递归次数限制引起的错误

使用BeautifulSoup时,可能会抛出如下错误: RecursionError: maximum recursion depth exceeded while calling a Python object 查看系统递归限制,调大即可: sys.getrecursionlimit() 1000 sys.setrecursionlimit(2000) 原文地址:http://blog.51cto.com/13934611/2165572

JavaScript二叉树的递归遍历方法

二叉树是由根节点,左子树,右子树组成,左子树和友子树分别是一个二叉树. 下面是一个二叉树的例子: { "ruleId":"", "name":"客户年龄大于20", "id":"root", "expression":"age>20", "yes":{ "name":"客户年龄大于25&quo