0
如果url参数不包含空ID,则调用getUserDetails和getOrganinztion List。 如果url参数不包含id,只需调用getOrganinztion。 但问题是结合最新不会调用方案2RxJs Partion if then else
let [updateUser$, createUser$] = this.route.params
.map((params: Params) => params['id'])
.partition(id => !!id);
updateUser$ = updateUser$
.do(() => {
this.isEdit = true;
})
.flatMap(id => this.userService.getUserById(id))
.map(user => {
let languageId = user['languageId'];
let organization = user['organization'];
let organizationObj = [{ id: organization, text: organization }];
return Object.assign(user, { languageId: [{ id: languageId, text: languageId }] }, { organization: organizationObj });
});
let getOrganization$ = this.userService.getOrganization();
Observable.combineLatest(getOrganization$, updateUser$, (organizationList: any, user: any) => {
return {
organizationList: organizationList,
user: user
};
})
.subscribe((data: any) => {
// pre populate the form
let user = data.user;
if (user) {
Object.keys(user).forEach(key => {
const control = this.userForm.get(key);
if (control) {
control.setValue(user[key]);
control.markAsDirty(true);
}
});
}
this.organizationList = data.organizationList.map(o => o.name);
}, err => this.error(err));
Observable.combineLatest(getOrganization$, createUser$, (organizationList: any) => {
return {
organizationList: organizationList,
};
})
.subscribe((data: any) => {
this.organizationList = data.organizationList.map(o => o.name);
}, err => this.error(err));
我应该如何这个问题,rxjs
我不明白为什么第二个combineLatest不工作,如果第一个dow,但我可以告诉this.userService.getOrganization将被调用两次,因为每个组合最新使用它。可观察的是冷的 - 两个订阅。也不确定ow通常这个参数应该得到新的id,每个组合中的getOrganization $ - 如果这是http并且是完整的,将只发出一个值,所以这意味着每个组合将发出最大一个值。 –
雅,第二次结合最新也被称为。 params(id)在ngOnInit上被调用,我使用相同的组件来创建用户和更新用户,是否有更简单的方法来获得相同的解决方案。 所以只有一个组合最新将被调用,所以只有一个getOrganziation $每页加载 – vito