微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在房间数据库中使用递归 CTE 构建闭包表

如何解决如何在房间数据库中使用递归 CTE 构建闭包表

下面的类是从 API 调用返回的结构,减去主键、父 ID 和深度。我的目标是使用递归 CTE 在 Room DB 中构建一个闭包表。

homePageId

当返回的 POJO 从 observable 发出时,我尝试遍历树。问题是对于一些 categoryId==parentId 的传递闭包,深度不正确。

const Notion = require("notion-api-js").default;
const token_v2 = "543f8f8529f361ab34596f5be9bc972b96ab8d8dc9e6e41546c05751b51a18a6c7d40b689d80794babae3a91aeb5dd5e47c34edb724cc356ceceacf3a8061158bfab92e68b7614516a0699295990"
const notion = new Notion({
  token: token_v2,});

const fetchPage = (id) => {
  return notion.getPagesByIndexId(id);
};

const homePageId = "3be663ea-90ce-4c45-b04e-41161b992dda" 
var crawledIdsList = [];
buildTree(tree={},homePageId).then(tree => {console.log(tree)}) 
function buildTree(tree,id) {
  return fetchPage(id).then((pages) => {
    tree.subpages = [];
    tree.slug = pages[0].Attributes.slug;
    tree.id = id;
    crawledIdsList.push(id);
    return Promise.all(
      pages.flatMap((page) => {
        var currentCrawlId = page.Attributes.id;
        if (crawledIdsList.indexOf(currentCrawlId) === -1) {
          // executes code block if currentCrawlId is not used in fetchPage(id) yet
          crawledIdsList.push(currentCrawlId);
          return buildTree({},currentCrawlId).then((futureData) => {
            tree.subpages.push(futureData);
            return tree;
          });
        } else {
          if (crawledIdsList.indexOf(id) >= 0) {
            return [];
          }
          return tree; // end case. futureData passed to earlier calls is tree,which looks like {subpages: [],slug: someSlug,id: someId}
        }
      })
    )
  });
}

那么...如何使用递归 CTE 在 Room DB 中构建闭包表?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。