等待observable在每个数组中完成,然后返回值



我正在数组中的每个元素上调用observable,以获取用户信息并返回那些带有observable信息的数组,但在返回之前,我没有看到数组的任何更新。

getUserInfo(){
let userCompleteInfo = this.userInfo.map(user=>{
let fullName: string;
if(user.userId){
this.getUserFullName(user.userId).pipe(
tap(userFName=>{
fullName = userFName
})
).subscribe();
}
return {
id: user.userId,
fullName: fullName
}
})
return userCompleteInfo;
}

上面的代码没有从observable返回fullName值,即使observable产生了正确的值。

正如您已经指出的,您在可观察的函数中设置fullName之前返回fullName。

您可以使用rxjs中的combineLatest运算符来等待所有可观察到的对象获得fullName,并从函数返回一个可观察到:

public getUserInfo(): Observable<{id: string, fullName: string}[]>{

return combineLatest(this.userInfo.map(user => 
this.getUserFullName(user.userId).pipe(
map(fullname => ({id: user.userId, fullName: fullName}))
)
));
}

rxjs中的combineLatest运算符等待参数数组中的所有可观察项,然后将其值作为传入可观察项的所有结果的数组返回。

最新更新