嗯。我的 Angular 组件中有一些异步代码,工作正常。看起来像这样(简要地):
export class SomeComponent {
user: User;
/* ... */
email: string;
/* ... */
private someMethod(): void {
/* some code here */
this.userService1.getUsers().subscribe(users => {
users.forEach(user => {
if (user.email && user.email === this.email) {
this.userService2.getUser(user.id).subscribe(foundUser => {
let someFields;
if (foundUser) {
someFields = (({ field1, field2 }) => ({ field1, field2 }))(foundUser);
}
this.user = {...user, ...someFields};
});
}
});
});
/*some code here */
}
}
我跳过了一些类型和命名变量有点尴尬(但简单)因为这不是重点。代码有效。但是我想封装用户构建(来自 2 个服务)的过程,因为我需要在不同的组件中使用它。我试过了,但是……
constructUser(email): Observable<IUser> {
let finalUser: IUser;
return this.userService1.getUsers().merge(users => {
return users.filter(user => {
if (user.email && user.email === email) {
return this.userService2.getUser(user.id).map(foundUser => {
let someFields;
if (foundUser) {
someFields = (({ field1, field2 }) => ({ field1, field2 }))(foundUser);
}
finalUser = {...user, ...someFields};
return Observable.of(finalUser);
});
}
});
});
}
我的 WebStorm 没有显示任何错误。但在控制台中,我得到 this.userService1.getUsers(...).merge is not a function。
我已经尝试过merge、concat、flatMap 等等——但仍然没有成功。唯一的区别是我遇到的错误。我对 rxjs 没有太多经验,所以我被卡住了。任何帮助或提示将不胜感激。
更新。
已解决,但 7 天(赏金事件期间)仍然欢迎任何人提供更简洁和实用的解决方案:)
最佳答案
我想这就是你想要的:
RxJs 5:
import 'switchMap' from 'rxjs/add/operator/switchMap';
import 'map' from 'rxjs/add/operator/map';
this.userService1.getUsers()
.map(users => users.find(userInList => userInList.email === "SomeEmail")) //Map the observable with users to a single user
.switchMap(user => this.userService2.getUser(user.id)) //Map the observable by an other observable
.subscribe(...doSomething with the result)
RxJs 6:
import {map, switchMap} from 'rxjs/operators';
this.userService1.getUsers().pipe(
map(users => users.find(userInList => userInList.email === "SomeEmail")), //Map the observable with users to a single user
switchMap(user => this.userService2.getUser(user.id)) //Map the observable by an other observable
).subscribe(...doSomething with the result)
关于javascript - 尝试从 "observable' s 链获取可观察性时出现错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768217/