Я борюсь с проблемой "Promise".
У меня есть этот код:
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);
}
}
Как вы понимаете, мне нужно выполнить 3 операции с каждым child
(создать категорию элемента, установить атрибут внешнего идентификатора и установить родительский элемент), а затем, только когда категория child
для создания, вызовите функцию createTree рекурсивно также для ее потомков, передав ее идентификатор.Проблема в том, что я не могу сделать это асинхронно.Иногда дети создаются до того, как родитель готов, поэтому я получаю сообщение об ошибке.Не могли бы вы помочь мне понять, что я делаю неправильно?
пс.да все функции async function
обещания.