如何给递归方法加一个异步机制,使得能够在外层等待该递归方法执行完成后再执行后续流程?
如题,假设在methods中有一个init初始化方法和一个loopfun(自定义的递归方法),初始化方法里面需要调用loopfun这个方法去清洗数据,但是现在遇到的情况是在init方法内,当我var data = this.loopfun(arr,key)这样申明一个data对象去接收递归方法的返回值的时候,返回的是undefined,如下:
init(){ var data = this.loopfun(arr,key)
console.log(data)//undefined
},
loopfun(arr,key){
for(var i=0,i<arr.length;i++){
if(arr[i].id==key){
return {i:i,name:arr[i].name}
} else {
if(arr[i].child.length>0){
this.loopfun(arr[i].child,key)
}
}
}
}
直接延时执行又不太好把握这个时机(最好是当loopfun方法return之后就马上执行后续步骤),所以我想利用Promise这种方式来实现这个需求,改写如下:
init(){ this.loopfun(key,arr).then(val => {
console.log(val);
})
},
loopfun(arr,key){
for(var i=0,i<arr.length;i++){
if(arr[i].id==key){
return Promise.resolve({i:i,name:arr[i].name})
} else {
if(arr[i].child.length>0){
this.loopfun(arr[i].child,key)
}
}
}
}
发现控制台报错Cannot read property 'then' of undefined",应该是这种写法不正确。请问改如何按照Promise的方式实现这个清洗数据的递归方法?
回答:
loopfun(arr,key){ for(var i,i<arr.length;i++){
if(arr[i].id==key){
return {i:i,name:arr[i].name}
} else {
if(arr[i].child.length>0){
const temp = this.loopfun(arr[i].child,key)
if (temp) return temp
}
}
}
回答:
你的 i 都没有给初始值for(var i,i<arr.length;i++){
i<arr.length 直接是个false 就没有执行for里面的内容,所以返回就是个 undefined 了
改成for(var i = 0;i<arr.length;i++){
试试
以上是 如何给递归方法加一个异步机制,使得能够在外层等待该递归方法执行完成后再执行后续流程? 的全部内容, 来源链接: utcz.com/p/937003.html