我有一个userIds数组。例如:['jd', 'abc']
。我正在遍历userIds以通过api获取全名。最后,我想将上面的数组变成[ {userId: 'jd', name: 'John Doe"}, {userId: 'abc', name: 'full name'}]
。
以下代码:我尝试在订阅内部返回arrEnriched
,也尝试在forkjoinm外部返回。两者都没有按预期工作。
getUserObj(arr){
const arrEnriched = [];
forkJoin(arr.map((item)=> {
return this.userService.getUserName(item).pipe(pluck('name'));
})).subscribe( (arrayOfHits)=>{
const names = arrayOfHits.map(...); // transform data
arrEnriched = names.map(...); // map from full name to object
console.log(arrEnriched); // as expected here
//return arrEnriched;
});
// return arrEnriched;
}
然后我尝试在ngOnInit()
ngOnInit(){
this.childOneComponent.users = this.getUserObj(this.arrUsers);
this.childTwoComponent.users = this.getUserObj(this.anotherArrUsers);
}
谢谢。
答案 0 :(得分:0)
函数getUserObj()
是异步的。您无法同步从中返回数据。您可以改为返回可观察对象并在需要数据的地方订阅它。尝试以下
getUserObj(arr): Observable<any> {
return forkJoin(arr.map((item) => {
return this.userService.getUserName(item).pipe(pluck('name'));
})).pipe(
map(arrayOfHits => {
const names = arrayOfHits.map(...); // transform data
return names.map(...); // map from full name to object
})
);
}
ngOnInit() {
this.getUserObj(this.arrUsers).subscribe((arrEnriched) => {
this.childOneComponent.users = arrEnriched;
});
this.getUserObj(this.anotherArrUsers).subscribe((arrEnriched) => {
this.childTwoComponent.users = arrEnriched;
});
}
您可以找到有关如何访问异步数据here的更多信息。