异步/等待不适用于递归函数

时间:2019-03-15 08:49:41

标签: node.js recursion 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);
  } 
}

如您所知,我需要对每个child执行3次操作(创建元素类别,设置外部id属性并设置父项),然后仅在child类别为创建后,还对其子代递归调用 createTree 函数,并传递其ID。 问题是我无法异步执行此操作。有时,孩子是在父母准备好之前创建的,所以我会收到错误消息。 您能帮我了解我在做什么错吗?

ps。是的,所有功能都是async function许诺。

0 个答案:

没有答案