从云函数:如何调用递归的JavaScript函数?

从云函数:如何调用递归的JavaScript函数?,javascript,recursion,parse-platform,parse-cloud-code,Javascript,Recursion,Parse Platform,Parse Cloud Code,这个递归编码是否错误,或者只是即使执行了递归,console.log()也不总是执行 function testrecur(s) { console.log("begin testrecur=" + s); s++; if (s < 10) { testrecur(s); } else { return s; } } Parse.Cloud.define("testrecursion", function(reques

这个递归编码是否错误,或者只是即使执行了递归,console.log()也不总是执行

function testrecur(s) {
    console.log("begin testrecur=" + s);
    s++;
    if (s < 10) {
        testrecur(s);
    } else {
        return s;
    }
}
Parse.Cloud.define("testrecursion", function(request, response) {
    Parse.Promise.as().then(function() {
        return testrecur(0);
    }).then(function(Result) {
        response.success(Result);
    }, function(error) {
        response.error(error);
    });
});
再次执行testrecursion会在信息控制台日志中显示这一点

I2015-10-10T08:19:15.970Z]begin testrecur=0
I2015-10-10T08:19:15.971Z]begin testrecur=1
I2015-10-10T08:19:15.972Z]begin testrecur=2
I2015-10-10T08:19:15.973Z]begin testrecur=3
I2015-10-10T08:19:15.974Z]begin testrecur=4
I2015-10-10T08:19:15.975Z]begin testrecur=5
I2015-10-10T08:19:15.978Z]begin testrecur=8
I2015-10-10T08:22:14.729Z]begin testrecur=2
I2015-10-10T08:22:14.731Z]begin testrecur=4
I2015-10-10T08:22:14.732Z]begin testrecur=5
I2015-10-10T08:22:14.733Z]begin testrecur=6
I2015-10-10T08:22:14.734Z]begin testrecur=7
第三次执行testrecursion会在信息控制台日志中显示这一点

I2015-10-10T08:19:15.970Z]begin testrecur=0
I2015-10-10T08:19:15.971Z]begin testrecur=1
I2015-10-10T08:19:15.972Z]begin testrecur=2
I2015-10-10T08:19:15.973Z]begin testrecur=3
I2015-10-10T08:19:15.974Z]begin testrecur=4
I2015-10-10T08:19:15.975Z]begin testrecur=5
I2015-10-10T08:19:15.978Z]begin testrecur=8
I2015-10-10T08:22:14.729Z]begin testrecur=2
I2015-10-10T08:22:14.731Z]begin testrecur=4
I2015-10-10T08:22:14.732Z]begin testrecur=5
I2015-10-10T08:22:14.733Z]begin testrecur=6
I2015-10-10T08:22:14.734Z]begin testrecur=7
经过几十次测试,递归步骤似乎偶尔被调用。输出似乎是随机的。预期产量为

I2015-10-10T08:19:15.970Z]begin testrecur=0
I2015-10-10T08:19:15.971Z]begin testrecur=1
I2015-10-10T08:19:15.972Z]begin testrecur=2
I2015-10-10T08:19:15.973Z]begin testrecur=3
I2015-10-10T08:19:15.974Z]begin testrecur=4
I2015-10-10T08:19:15.975Z]begin testrecur=5
I2015-10-10T08:19:15.975Z]begin testrecur=6
I2015-10-10T08:19:15.975Z]begin testrecur=7
I2015-10-10T08:19:15.975Z]begin testrecur=8
I2015-10-10T08:19:15.975Z]begin testrecur=9
这看起来像是递归正确发生了,只是控制台日志没有记录所有消息

我正在努力实现赫克托·拉莫斯在书中提到的 可以使用递归,但不能递归调用云函数,因为云函数请求将在不同的线程上执行。而是使用从云函数启动的常规JavaScript函数。
-大约2年前,Héctor Ramos发现testrecur()需要返回一个承诺,以便调用方(在本例中为testrecursion())在启动承诺中的下一个链之前等待testrecur()完成。实际代码可在


顺便说一句,这个问题中的递归代码是正确的,因为递归的发生是正确的。我们只需要按顺序绑定承诺,这样每个递归调用都有机会在调用函数完成之前完全执行。

如果您只运行
testrecur(0),控制台中会发生什么键入
testrecur(0)
在控制台中h,对不起,您将
testrecur
函数复制到控制台中。点击回车键,然后键入上面的命令当您执行
testrecur(0)
时,控制台是否存在相同的间隙?它是未定义的,因为您需要
返回testrecur(s)。我见过控制台。以前chrome中的日志是零星的。不确定这是铬合金的东西还是有其他因素