应该如何修改可以在递归调用结束之后只调用editAreaDistrict接口一次,感谢各位
expandAllChildren(pathCode, layer) {
queryDistrictListByParent(pathCode, layer).then((response) => {
if (response.status === 200) {
response.data.forEach((item, index) => {
this.tableData.push(item)
// 如果当前子级还有子级执行递归
if (item.hasChildren === true) {
this.expandAllChildren(item.pathCode, item.layer)
}
})
this.tableData = this.filterSameAttri(this.tableData);
let params = {
areaId: this.selectItems.id,
areaNumber: this.productCategory.Code,
areaName: this.productCategory.Name,
districtLists: this.tableData,
}
//想在递归结束之后调用的接口
editAreaDistrict(params).then((response) => {
if (response.status == 200) {
this.$message.success('关联成功')
this.cancelDisabled = true // 取消不可用
this.saveDisabled = true // 保存不可用
this.delDisabled = false
this.helpDialogVisible = false
this.searchInterface()
}
})
this.dialogVisible = false
}
})
},
建议&疑问
await
代替Promise.then
写法,逻辑更容易理清楚。(参阅:理解 JavaScript 的 async/await)response.data.forEach
这里是异步遍历(里面递归调用的expandAllChildren
是异步处理)。这里要等所有异步完成,应该拿到所有对应的 Promise 对象并使用Promise.all
或者Promise.allSettled
来等待所有项完成param
参数中的tableData
是贯穿了所有递归过程的,所以editAreaDistrict
真的是想写在这个位置吗?expandAllChildren
看作入口)所以,先自己清理一下逻辑。然后再来研究下怎么写。