Async / Await не работает в рекурсивной функции - PullRequest
1 голос
/ 15 марта 2019

Я борюсь с проблемой "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 обещания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...