在这种情况下,我不得不根据父数据获取一些数据。
现在的问题是外循环在内部循环之前已经完成,所以数组如下所示
[{name:'parentcomp1',子代:{}}]
这是代码
prepareJson() {
this.service.getComps().subscribe(res =>{
var comps = res;
var that = this;
for(var element of comps) {
that.service.getChilds(element._id).subscribe((res1:any)
=>{
if(res1.length>0)
list.push({name:element.name,children:res})
},err => console.log(err));
}
},err => console.log(err));
}
请帮帮忙。
发布于 2019-08-26 05:18:40
要首先修复上面的代码,您的函数应该返回一个可观察的/允诺,因为HTTP调用是异步的。
此外,您还可以使用“mergeMap”来解决您所面临的进一步问题。例如(注意:代码未经测试)
import { Observable, from, EMPTY, Subject } from 'rxjs';
import { mergeMap, finalize, catchError } from 'rxjs/operators';
private prepareJson(): Observable<T> {
const response$ = new Subject<T>();
this.service.getComps().subscribe(res => {
const comps = res;
from(comps)
.pipe(
mergeMap((element: any) => {
return this.service.getChilds(element._id)
.pipe(
catchError(err => {
console.log(err);
return EMPTY;
})
);
}),
finalize(() => {
response$.next(list);
response$.complete();
}),
).subscribe((res1: any) => {
if (res1.length > 0) {
list.push({ name: element.name, children: res });
}
});
}, (err) => {
console.log(err);
response$.error(err);
response$.complete();
});
return response$.asObservable();
}在这里,'prepareJson‘是返回一个可以观察到的外部世界。我们从'getComps‘中获取结果,并在此基础上获取它。一旦检索到所有结果,就会通过可观察的方式触发结果。
https://stackoverflow.com/questions/57646207
复制相似问题