Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript *RxJs*如何将多个ajax组合成一个不需要';不需要顺序_Javascript_Angular_Rxjs_Rxjs5 - Fatal编程技术网

Javascript *RxJs*如何将多个ajax组合成一个不需要';不需要顺序

Javascript *RxJs*如何将多个ajax组合成一个不需要';不需要顺序,javascript,angular,rxjs,rxjs5,Javascript,Angular,Rxjs,Rxjs5,我有两个API来获取Angular5上的菜单数据,但我不知道我是否使用嵌套订阅getSecondMenu函数是RxJs的正确方法。有人知道吗,以下是预期结果和示例代码: console.log: 1.获取第一个菜单列表 2.全部完成 3.获取第二菜单*3 getFirstMenu$() .do(firstMenuList=>{ log('get firstMenuList'); }) .do(firstMenuList=>{ firstMenuList.forEach(firstMenu=

我有两个API来获取Angular5上的菜单数据,但我不知道我是否使用嵌套订阅getSecondMenu函数是RxJs的正确方法。有人知道吗,以下是预期结果和示例代码:

console.log:
1.获取第一个菜单列表
2.全部完成
3.获取第二菜单*3

getFirstMenu$()
.do(firstMenuList=>{
log('get firstMenuList');
})
.do(firstMenuList=>{
firstMenuList.forEach(firstMenu=>{
//嵌套订阅:绑定到子属性,让Angular自动生成HTML中的第二个菜单
getSecondMenu$(firstMenu.ID).subscribe((secondMenu)=>{
firstMenu.child=secondMenu;
log('get secondMenu');
});
})
})
.订阅((菜单列表)=>{
console.log(“全部完成”);
});
函数getFirstMenu$(){
返回Rx.observative.of([{
ID:'菜单1',
子项:空
}, {
ID:'menu2',
子项:空
}, {
ID:'菜单3',
子项:空
}, ]);
}
函数getSecondMenu$(menuID){
设source=null;
开关(menuID){
案例“menu1”:
来源=[{
ID:'子菜单1-1',
}];
打破
案例“menu2”:
来源=[{
ID:'子菜单2-1',
}];
打破
违约:
来源=[];
打破
}
const delayTime=((Math.random()*20)+5)*120;
返回(源)的可观测Rx.延迟(延迟时间);
}
试试这个

getFirstMenu$()
.map(firstMenuList => Observable.from(firstMenuList))
.flatMap(firstMenu=> getSecondMenu$(firstMenu.ID))
.do(secondMenu => firstMenu.child = secondMenu)
.subcribe()
编辑1

getFirstMenu$()
.mergeMap(firstMenuList => Rx.Observable.from(firstMenuList))
.mergeMap(firstMenu=> getSecondMenu$(firstMenu.ID)
,(firstMenu, secondMenu) => {
 firstMenu.child=secondMenu
 return firstMenu
 })
.reduce((acc,curr)=>  acc.concat(curr) ,[])
.subscribe((menuList) => {
 console.log(menuList)
 });

在这个示例中,我不知道如何获取菜单列表数据,我尝试了一下,你能帮我纠正一下吗?你可以模拟一个像getFirstMenu$=()=>Observable.of([{lable:'one'},{lable:'two'}]),并在Fiddle中使用它,我已经使用了Observable.of在jsFiddle中,你可以在这个链接上检查它并更新你的Fiddle谢谢你的回答,我在预期结果中添加了一个时间线,希望我的问题能简单一些,你能检查一下这个和这个ForEach。订阅看起来是一个获得内存泄漏的可靠方法。。即使没有嵌套的第二个call@c69有什么好方法可以避免内存泄漏?使用平面图?