如何给递归方法加一个异步机制,使得能够在外层等待该递归方法执行完成后再执行后续流程?

如何给递归方法加一个异步机制,使得能够在外层等待该递归方法执行完成后再执行后续流程?

如题,假设在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

回到顶部