递归执行rxjs可观测函数

递归执行rxjs可观测函数,rxjs,Rxjs,我是RxJs的新手。我试图递归地运行可观察函数,但没有运气。我想按这个顺序打印 表单文本框图标文本区域 这是我到目前为止试过的。任何帮助都将不胜感激 const args = { name: 'form', children: [{ name: 'textbox', children: [{ name: 'icon', children: [] }] }, { name: 'textarea', children: []

我是RxJs的新手。我试图递归地运行可观察函数,但没有运气。我想按这个顺序打印

表单文本框图标文本区域

这是我到目前为止试过的。任何帮助都将不胜感激

const args = {
  name: 'form',
  children: [{
    name: 'textbox',
    children: [{
      name: 'icon',
      children: []
    }]
  }, {
    name: 'textarea',
    children: []
  }]
};

import { of, from, Observable, concat } from 'rxjs'; 
import { map, concatAll, combineAll } from 'rxjs/operators';

const render = (component) => {
 return new Observable<any>(observer => {
   console.log(component.name);
   concat(...component.children.map(x => render(x)))
   .subscribe(() => observer.next());
 });
};

render(args).subscribe(() => console.log('done'));
const args={
名称:'表格',
儿童:[{
名称:“文本框”,
儿童:[{
名称:'图标',
儿童:[]
}]
}, {
名称:'textarea',
儿童:[]
}]
};
从“rxjs”导入{of,from,Observable,concat};
从“rxjs/operators”导入{map,concatAll,combineAll};
常量渲染=(组件)=>{
返回新的可观察对象(观察者=>{
console.log(组件名);
concat(…component.children.map(x=>render(x)))
.subscribe(()=>observer.next());
});
};
render(args).subscribe(()=>console.log('done'));

这给出了正确的顺序。如果我遗漏了什么,请评论:

const{of,concat}=rxjs;
常量args={
名称:'表格',
儿童:[
{
名称:“文本框”,
儿童:[
{
名称:'图标',
儿童:[]
}
]
},
{
名称:'textarea',
儿童:[]
}
]
};
const render=(component)=>concat(of(component),…component.children.map(render));
render(args).subscribe({name})=>console.log(name))

这给出了正确的顺序。如果我遗漏了什么,请评论:

const{of,concat}=rxjs;
常量args={
名称:'表格',
儿童:[
{
名称:“文本框”,
儿童:[
{
名称:'图标',
儿童:[]
}
]
},
{
名称:'textarea',
儿童:[]
}
]
};
const render=(component)=>concat(of(component),…component.children.map(render));
render(args).subscribe({name})=>console.log(name))

非常有魅力。谢谢,很有魅力。谢谢。为什么要使用rxjs转换单个静态结构?我认为你在这项工作中使用了错误的工具。@Davy这是一个示例代码。在实际代码中,而不是在console.log中,会发生一些异步的事情。为什么要使用rxjs转换单个静态结构?我认为你在这项工作中使用了错误的工具。@Davy这是一个示例代码。在实际代码中,而不是在console.log中,将发生一些异步事件。