从云函数:如何调用递归的JavaScript函数?
这个递归编码是否错误,或者只是即使执行了递归,console.log()也不总是执行从云函数:如何调用递归的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
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中的日志是零星的。不确定这是铬合金的东西还是有其他因素