我正在努力解决“承诺”问题。
我有此代码:
let createCategoryRoot = await categoryService.createCategory(rootCategory.title);
let setExternalIdRoot = await categoryService.setExternalId(createCategoryRoot.body.version, createCategoryRoot.body.id, rootCategory.categoryid);
await createTree(rootCategory, setExternalIdRoot);
return true;
这是 createTree 函数(递归):
async function createTree(rootCategory, setExternalIdRoot) {
try {
if(rootCategory.children !== undefined && rootCategory.children.category !== undefined){
if (rootCategory.children.category.length > 0) {
for (var i = 0; i < rootCategory.children.category.length; i++) {
let child = rootCategory.children.category[i];
let createCategory = await categoryService.createCategory(child.title);
let setExternalId = await categoryService.setExternalId(createCategory.body.version, createCategory.body.id, child.categoryid);
let changeParent = await categoryService.changeParent(setExternalId.body.version, setExternalId.body.id, setExternalIdRoot.body.id)
await createTree(child, changeParent.body.id);
}
}
}
} catch (e) {
console.log(e);
}
}
如您所知,我需要对每个child
执行3次操作(创建元素类别,设置外部id属性并设置父项),然后仅在child
类别为创建后,还对其子代递归调用 createTree 函数,并传递其ID。
问题是我无法异步执行此操作。有时,孩子是在父母准备好之前创建的,所以我会收到错误消息。
您能帮我了解我在做什么错吗?
ps。是的,所有功能都是async function
许诺。