js await的函数,这个函数里又有递归,还没有执行完就执行了

使用 async await来操作函数异步,函数体内有递归,但是递归还没有完成就执行完了函数。then里面的返回值是个数组但是数组打印的长度是1,但真实长度应该是5,打断点调试res的第一个返回值是一个长度为1的数组,但是紧接着就是长度为5的数组,await不是应该等getAllDownRoteEquipment函数执行完了再返回值吗?请求大神解答

    getAllDownRoute(){
        viewer.vmethods.getAllDownRoteEquipmentArr().then(function(res){
            console.log(res)
        })
    }
    async getAllDownRoteEquipmentArr(id){
      
        var equipmentArr = [];
        
        var selectIds = viewer.getSelection()[0];
        
        await viewer.vmethods.getAllDownRoteEquipment(selectIds,equipmentArr);
        
        return equipmentArr;
    }

    getAllDownRoteEquipment(id,equipmentArr){
        return new Promise(function (resolve) {
            var aa = (id,equipmentArr)=>{
                viewer.getProperties(id,function(res) {
                    for (var i = 0; i < res.properties.length; i++) {
                        if (res.properties[i].displayName == "型号") {
                            var downEquipment = res.properties[i].displayValue;
                            equipmentArr.push(downEquipment);
                            resolve(equipmentArr);
                            viewer.search(downEquipment,(searchId) =>{
                                aa(searchId[0],equipmentArr)
                            },function(){},"自身标识");
                            break;
                        }
                    }
                })
            }
            aa(id,equipmentArr)
        })
    }
阅读 5.2k
2 个回答

resolve(equipmentArr)之后这个promise状态就不会改变了,然后await执行就结束了。放在里面是可以的,但是你要判断递归的结束条件,递归到结尾的时候才能执行resolve。

问题出在aa函数里的这一句resolve(equipmentArr);,调用resolve就返回了,然后才执行后面的循环和递归的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题