异步加递归问题,await被跳过?

异步加递归问题,await被跳过?函数recursive 是异步加递归
理想状态是:在函数updateParams调用 await函数recursive执行完后再执行后面代码。
实际:函数recursive还没执行完后面的代码就执行了


    async updateParams(type, keyword) {

if(this.treeData.length === 0) {

await this.recursive(this.vNode.childNodes)

console.log("? updateParams this.recursive?", this.treeData)

}

console.log('查找-');

const data = this.treeData.find(item => item.path === type)

this.setParams(data)

const query = Object.assign({}, this.params,{

current : 1,

size : 10000,

data : keyword

})

const res = await fetchPage(query)

this.ids = res.data.data.records.map(i => i.id)

},


 async recursive(data) {

try {

for (let i = 0; i < data.length; i++) {

const item = data[i]

if(item.isLeaf) {// 没有下级

const data = item.data ? item.data : item

this.treeData.push(data)

}else {

const { data } = await fetchArchiveTree(this.getQueryParams(item))

data.data.forEach(item => {

if(!item.isLeaf) {

const Arr = [item]

this.recursive(Arr)

}

this.treeData.push(item)

});

}

}

} catch (error) {

console.log('获取树形数据失败',error);

}

console.log('数据收集完毕');

},


getQueryParams(res) {

const data = res.data ? res.data : res

return {

id: data.id,

filter: data.filter || '',

path: data.path || '',

fondsCode: this.current_fonds

}

},


回答:

recursive 方法内部实现的问题,Array 的 forEach 循环是不支持 async/await 的,所以应该把 forEach 部分换成 for 循环再配合 await ,如下:

 async recursive(data) {

try {

for (let i = 0; i < data.length; i++) {

const item = data[i]

if(item.isLeaf) {// 没有下级

const data = item.data ? item.data : item

this.treeData.push(data)

}else {

const { data } = await fetchArchiveTree(this.getQueryParams(item))

for (let item of data.data) {

if(!item.isLeaf) {

const Arr = [item]

await this.recursive(Arr)

}

this.treeData.push(item)

}

}

}

} catch (error) {

console.log('获取树形数据失败',error);

}

console.log('数据收集完毕');

},

以上是 异步加递归问题,await被跳过? 的全部内容, 来源链接: utcz.com/p/935113.html

回到顶部