您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

如题,假设在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的方式实现这个清洗数据的递归方法?

javascript 2022/2/8 20:50:31 有530人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶