以下代码来自我的服务组件。它要求用户可观察,并且数据要在BehaviorSubject中提交。我打电话给form.service.formToSubmit$.next(form);
进行更新。因为combinateLatest也在用户可观察到的发射时触发,所以我检查formToSubmit是否不为空,并且在提交后将其设置为null。但是当我更新formToSubmit时它没有触发。我已经尝试过一切。
this.formToSubmit$ = new BehaviorSubject<Forms>(null);
constructor(){
this.updateForm();
}
updateForm(){
combineLatest(this.authService.user$, this.formToSubmit$).pipe(
switchMap(([user, form]) =>{
if(form == null) return;
return this.afs.collection('networks').doc(user.activeNetworkProfile.id).collection('companyProfiles').doc(user.activeCompanyProfile.id).collection('inspectionForms').doc(form.id).set(JSON.parse(JSON.stringify(form))).then(success=>{
this.formToSubmit$.next(null);
}).catch(err=>{
this.formToSubmit$.next(null);
});
})
);
}
这是以前的代码,效果很好。
updateFormdd(form: Forms){
return Observable.create(observer=>{
this.authService.user$.subscribe(user=>{
this.afs.collection('networks').doc(user.activeNetworkProfile.id).collection('companyProfiles').doc(user.activeCompanyProfile.id).collection('inspectionForms').doc(form.id).set(JSON.parse(JSON.stringify(form))).then(success=>{
observer.next(success);
observer.complete();
}).catch(err=>{
observer.err(err);
});
})
})
}
但是最终的目的是弄清楚如何执行上述功能,但允许我像以下功能一样组合最多3个可观察到的东西。
updateInspection(){
combineLatest(this.authService.user$, this.equipmentId$, this.inspectionToSubmit$).pipe(
switchMap(([user, equipmentId, form]) =>{
if(form == null) return;
return this.afs.collection('networks').doc(user.activeNetworkProfile.id).collection('companyProfiles').doc(user.activeCompanyProfile.id).collection('equipment').doc(equipmentId).set(JSON.parse(JSON.stringify(form))).then(success=>{
this.formToSubmit$.next(null);
}).catch(err=>{
this.formToSubmit$.next(null);
});
})
);
}
我只是想确保Im正确地使用了Observable。谢谢
答案 0 :(得分:0)
两个代码之间的区别的关键是“订阅”。
工作版本已订阅。由于您的可观察物是冷可观察物,因此只有在订阅了某些内容后它们才会发出。
找出要在哪里使用该可观察对象,然后在其中添加订阅。
this.formToSubmit$ = new BehaviorSubject<Forms>(null);
constructor(){
let mySubscription = this.updateForm().subscribe(
(dataFromCombineLatest) => {
// This subscription should cause the code inside the combine to fire
}
);
此外,如果它在“组件”内部,则我建议在“ onInit”中而不是在构造函数中运行该位(我希望构造函数代码精简)。