我有以下递归函数,当transformItem的输出是同步的时,它可以很好地工作,但是当transformItem返回一个promise并且仍然获得相同类型的期望时,我一直很难弄清楚如何重构它对象输出。
function transformStack(target, stack){
var stackItem = stack.shift();//Copy Value
util.logData(_this.context, "Target:" + JSON.stringify(target) + " Stack:" + JSON.stringify(stack), 9);
switch(stackItem){
case "[]":
for(var x=0; x < target.length; x++){
//Copies values so not by Ref any more
var nextTarget = JSON.parse(JSON.stringify(target[x]));
if(stack.length > 0){
util.logData(_this.context, "Loop[]:" + JSON.stringify(nextTarget), 8);
target[x] = transformStack(nextTarget, JSON.parse(JSON.stringify(stack)));
} else {
util.logData(_this.context, "TransformTarget[]:" + JSON.stringify(nextTarget), 8);
target[x] = transformItem(nextTarget);
}
}
break;
default:
//Copies values so not by Ref any more
var nextTarget = JSON.parse(JSON.stringify(target[stackItem]));
if(stack.length > 0){
util.logData(_this.context, "Loop:" + JSON.stringify(nextTarget), 8);
target[stackItem] = transformStack(nextTarget, JSON.parse(JSON.stringify(stack)));
} else {
util.logData(_this.context, "TransformTarget:" + JSON.stringify(nextTarget), 8);
target[stackItem] = transformItem(nextTarget);
}
}
return target;
}
我创建了这个基础JSFiddle,它说明了我对我期望的更好:
https://jsfiddle.net/fxay76k8/9/
任何人都可以帮我指出正确的方向吗?我一直在看下面的Stack Overflow帖子,但是还没能将它正确地应用到我的流程中: JavaScript : Calling Recursive Functions With Promises
谢谢你的帮助!
顺便说一句,我正在使用Q作为承诺,但我非常有信心我可以将任何其他承诺库翻译成我需要的东西,如果有人可以帮助我理解这里的概念。答案 0 :(得分:0)
我能够使用以下重构代码:
str="karhik reddy"
n= str.length
for i in n.downto(0) do // reverse iteration of ruby
str += str[i].to_s
end
puts str[-n..-1]
对我而言,最重要的事情是围绕如何合并对象,因为新值会递增递归。这是handleResponse的句柄。
现在我已经得到了这个答案,链接的StackOverflow是如何关联的,但是由于某种原因,我起初很难解决这个问题。