递归 http-api 调用后向订阅者发送消息

2024-02-03

我想获取节点列表来创建所述节点对象的数组,以便显示层次结构。基础数据/结构如下所示:

ROOT (ID=1)
|--NODE (ID=2)
|  └--NODE (ID=4)
|     └--NODE (ID=11)
└--NODE (ID=3)
   |--NODE (ID=5)
   |--NODE (ID=6)
   |--NODE (ID=7)
   └--NODE (ID=8)
      |--NODE (ID=9)
      └--NODE (ID=10)  

您有一个根节点,其子节点也包含子节点。包括ROOT节点在内,树中有3个阶段。我创建了一个 REST-API,它返回给定节点内的子节点。我还尝试在 REST 结构中对该层次结构进行建模,因此调用如下所示:

TYPE        PATH                      RESULT CHILD IDs
GET         /1/nodes                  2, 3
GET         /1/nodes/2/nodes          4
GET         /1/nodes/3/nodes          5, 6, 7, 8
GET         /1/nodes/3/nodes/8/nodes  9, 10 

为了构建一棵树,我尝试使用递归模式,如下所示:

    this.subject.next(this.getNodes('/1/nodes'); /*root-uri*/

    getNodes(uri) {
      const nodeList: Node[] = [];
      http.get(path).subscribe(data => {
        for(const obj of data.json()) {
            let node = new Node();
            //map data to Node e.g node.is = data.id

            //get the children with the nested call
            node.children = getNodes(uri + '/' + node.id + '/nodes'); 
            nodeList.push(node);
        }
    }
    return nodeList;
}  

所以我的问题是:
如何通过递归 http 调用创建节点对象数组并向订阅者发送消息,以便订阅者仅接收结构正确的完整节点数组


EDIT

这就是节点模型的样子

export class Node {
  uuid: string;
  label: string;
  parentID: string;
  version: number;
  addableFlag: boolean;
  sectionFlag: boolean;
  children: Node[];
}

您将需要设置this.subject值与在subscribe()范围。这样,在设置值之前它就会有一个结构正确的完整列表。

this.getChildren('/1/nodes'); /*root-uri*/

getNodes(uri) {
    const nodeList: Node[] = [];
    http.get(path).subscribe(data => {
        for (const obj of data.json()) {
          let node = new Node();
          //map data to Node e.g node.is = data.id

          //get the children with the nested call
          node.children = getNodes(uri + '/' + node.id + '/nodes');
          nodeList.push(node);
        }
        this.subject.next(nodeList); /*root-uri*/
    }
      // Return would send empty data as this line get executed before data arrives
      // return nodeList;
}

这将起作用,因为它设置了subject当它有数据时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归 http-api 调用后向订阅者发送消息 的相关文章

  • 从函数返回函数的目的是什么?

    阅读一些遗留代码 发现 A prototype setSize function var v1 new Vector2 return function size var halfSize v1 copy size multiplyScala
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 模板解析:找不到管道

    我收到错误 模板解析错误 找不到管道 amDateFormat 这是我的app module ts import NgModule from angular core import MomentModule from angular2 mo
  • IE 中的 XPath 查询使用从零开始的索引,但 W3C 规范是从一开始的。我应该如何处理差异?

    问题 我正在转换目前仅适用于 Internet Explorer 的相对较大的 Javascript 代码 以便使其也适用于其他浏览器 由于代码广泛使用 XPath 我们做了一些兼容性功能以使事情变得更容易 function selectN
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • Vaadin 12 将对象传递给 JavaScript 函数:无法对类进行编码

    Vaadin 12 Kotlin 项目 In my myPage html我有JavaScript myObject redirectToCheckout sessionId 1111 2222 所以我需要调用javaScript函数red
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo

随机推荐

  • 如何在不出现“进程已退出”异常的情况下终止进程?

    I use Process Kill 杀死一个进程 像这样 if process WaitForExit 5000 process Kill 有时进程会在两行之间退出 因此控制权会进入内部if进而Kill将产生异常 System Inval
  • SOMAXCONN在C套接字编程中意味着什么?

    我对C Linux Ubuntu 套接字编程中的somaxconn一无所知 我搜索了几个网站 但所有这些都对我没有多大帮助 listen sockfd SOMAXCONN 这是否意味着同时收听最大数量 连接的套接字 include
  • 从 JavaFX 打开外部应用程序

    我找到了一种使用 HostServices 在默认浏览器上打开链接的方法 getHostServices showDocument http www google com 有什么方法可以在默认媒体播放器中打开媒体吗 有什么办法可以启动特定的
  • 如何从方法返回 IEnumerable

    我正在为一个示例项目开发接口 我希望它尽可能通用 所以我创建了一个如下所示的接口 public interface IUserFactory IEnumerable
  • ASP.NET Identity 3.0 上的 IIdentityMessageService 的等效项是什么?

    在 ASP NET Identity 2 X 上 我们可以通过以下方式配置通知基础结构IIdentityMessageService接口可在Microsoft AspNet Identity Core库 未升级到版本 3 0 在 ASP N
  • mat-card-avatar 在初始页面加载时未正确呈现

    我有一个简单的垫卡头像布局 它在我的应用程序的许多页面的标题中显示圆形图标 我发现在许多页面上 但不是所有页面 即使使用相同类型的代码 都没有渲染mat card avatar正确地在初始渲染通道上 我正在使用这段代码 h1 div cla
  • .Net 微框架的 Json 库

    我正在使用 Net Microframework 运行一个轻型网络服务器 我想知道哪些库主要适用于 JSON 序列化 但也可能适用于反序列化 我发现很多 JSON 库的问题是它们使用 MF 中不可用的奇特 Net 功能 并且比我需要的更复杂
  • 使用 LINQ 确定序列不包含元素[重复]

    这个问题在这里已经有答案了 可能的重复 LINQ 最大还是默认 https stackoverflow com questions 341264 linq max or default 我有一些 LINQ 需要过滤DateTime vars
  • 删除行后留下的 FILESTREAM 文件

    我已经在我的 SQL 2008 服务器上成功设置了 FILESTREAM 但是我注意到 即使我删除了包含 FILESTREAM 数据的行 物理数据文件似乎也没有被删除 我所说的物理文件是指 SQLServer 托管目录中以唯一标识符作为文件
  • 将 PIL.Image 转换为 skimage

    我的项目中有 2 个模块 第一个模块以字节格式处理图像 第二个模块需要 skimage 对象 我需要将它们结合起来 我有这个代码 import io from PIL import Image import skimage io area
  • KnockoutJS css 绑定 != true

    我的视图模型正在返回truevalue 我正在尝试让我的模板相应地添加 CSS 问题是 我找不到 a true 的语法 我有这样的事情 div div 我想会说 如果选中 true 则应用 lw touched 如果选中 false 则应用
  • 行边框颜色

    我想设置边框 tr 至黄色 我可以设置边界 td 但不知道如何设置行边框 tr 这个怎么做 Thanks 这个例子 http jsfiddle net yahavbr a5TyU 在 IE8 Chrome 9 和 Firefox 3 6 上
  • Rubaxa Sortable 如何获取项目数组

    我知道这很明显 但我无法弄清楚 我正在使用 Rubaxa sortable 并且希望在添加 删除项目或对列表进行排序时使用 ajax 更新我的数据库 var editableList Sortable create document get
  • Prolog-映射(关联数组)

    我正在学习序言 想知道是否有人指导我如何做这个问题 这是这个领域的许多问题中的第一个 知道如何做这个问题将真正帮助我进步 先感谢您 使用 Prolog 定义一个谓词 mapof K M V 这样 当 K 实例化为键 M 实例化为映射而调用时
  • 使用 fetch API 时在 AJAX 调用期间显示微调器

    在我的项目中 我正在迁移到 React 因此不加载 JQuery 由于我不再使用 JQuery 因此对于 AJAX 调用我使用 fetch 使用 JQuery 我可以挂钩 AJAX 调用的开始和结束 因此可以非常轻松地将光标更改为微调器 我
  • 如何在 Design Automation API 中创建数据转换活动?

    我正在制作一个 Web 服务原型 以使用 Autodesk Forge 中的 Design Automation API 转换数据 我的方法是调用一个执行脚本的活动来导入目标数据文件 例如STEP IGES格式 例如 我创建了一个将 STE
  • Mockito 创建模拟对象时抛出 NullPointer

    我有一个集成测试 其中一些设置是使用 Guice 完成的 我正在使用 Mockito 来模拟一些依赖项 到目前为止 这对我来说效果很好 我需要使用 PowerMock 来实现其他一些依赖项 现在 Mockito 正在抛出一个NullPoin
  • React Native ios不显示本地图像

    环境 苹果系统 10 14 6 Xcode 11 0 反应 16 8 6 反应本机 0 60 5 项目文件夹结构 谷歌驱动器图像链接 https drive google com open id 1nvB O5LH2p vq9qyR V7c
  • Java 和 C# 应用程序之间的 SSL 通信

    我的目标是在 Java 服务器和用 C 编写的客户端之间建立安全通信 java服务器代码 System setProperty javax net ssl keyStore cert mySrvKeystore System setProp
  • 递归 http-api 调用后向订阅者发送消息

    我想获取节点列表来创建所述节点对象的数组 以便显示层次结构 基础数据 结构如下所示 ROOT ID 1 NODE ID 2 NODE ID 4 NODE ID 11 NODE ID 3 NODE ID 5 NODE ID 6 NODE ID