0
url 매개 변수에 null ID가 없으면 getUserDetails 및 getOrganinztion List를 호출하십시오. url 매개 변수에 id가 없으면 getOrganinztion을 호출하십시오. 그러나 문제는 최신을 결합이다는 내가 일을 할 것입니다 rxjs와 같은RxJs Partion if then else
url 매개 변수에 null ID가 없으면 getUserDetails 및 getOrganinztion List를 호출하십시오. url 매개 변수에 id가 없으면 getOrganinztion을 호출하십시오. 그러나 문제는 최신을 결합이다는 내가 일을 할 것입니다 rxjs와 같은RxJs Partion if then else
뭔가를이 문제를 모델링하는 방법 시나리오 2.
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));
에 대한 호출되지 않습니다. 더미 관측 값을 http 및 경로 1로 바꿉니다. 이것은 단지 시뮬레이터입니다.
let routes$ = Rx.Observable.create((observer) => {
observer.next({id:1});
setTimeout(()=> observer.next({xx:1}), 1000);
setTimeout(()=> observer.next({id:2}), 2000);
setTimeout(()=> observer.next({xx:2}), 3000);
setTimeout(()=> observer.next({id:3}), 4000);
});
let [updateUser$, createUser$] =
routes$
.map(params=> params['id'])
.partition(id => !!id);
updateUser$
.switchMap(id=>Rx.Observable.of(`${id}_user`))
.switchMap(user=>Rx.Observable.of('organizationList'),
(user, organizationList) => ({user, organizationList})
).subscribe(x=>console.log(x));
createUser$
.switchMap(id=>Rx.Observable.of('organizationList'))
.map(organizationList=> ({organizationList}))
.subscribe(x=>console.log(x));
덕분에 결합 대신 flatmap을 사용하는 것이 좋습니다. – vito
왜 두 번째 combineLatest가 작동하지 않는지는 알 수 없습니다.하지만 첫 번째 항목이 작동하지 않으면 this.userService.getOrganization이 각 결합 최신 버전을 사용하기 때문에 두 번 호출됩니다. 관측통은 추위에있다 - 두 구독. 또한이 팔람은 자주 새로운 매개 변수를 가져야한다. 각 조합에서 getOrganization $은 http와 complete 일 경우 하나의 값만 방출하므로 각 결합이 최대 하나의 값을 방출 함을 의미한다. –
나중에 두 번째 결합 최신이라고도합니다. params (id)가 ngOnInit에서 호출되었습니다. 사용자 생성 및 업데이트 사용자에 대해 동일한 구성 요소를 사용합니다. 동일한 솔루션을 구현하는 더 간단한 방법이 있습니까? 그래서 최신 버전을 하나만 결합하면 페이지 당 하나의 getOrganziation $ 만로드됩니다. – vito