Объединяет последний не огонь из-за поведения субъекта? - PullRequest
0 голосов
/ 02 октября 2018

Следующий код взят из моего сервисного компонента.Это требует, чтобы пользователь наблюдал и данные отправляли в BehaviorSubject.Я звоню form.service.formToSubmit$.next(form);, чтобы обновить его.потому что CombineLatest также запускается, когда пользователь наблюдает, что он испускает, я проверяю, имеет ли formToSubmit значение NULL и установлен ли он в 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);
                    });
                })
            );

    }

Я просто хочу убедиться, что я правильно использую наблюдаемые.Спасибо

1 Ответ

0 голосов
/ 02 октября 2018

Ключом различия между вашими двумя частями кода является «подписка».

В рабочей версии была подписка.Поскольку ваши наблюдаемые являются холодными наблюдаемыми, они не будут излучать, пока на них что-то не будет подписано.

Выясните, где вы хотите использовать эту наблюдаемую, а затем добавьте туда подписку.

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» вместо конструктора (мне нравится мой код конструктора, чтобы быть бережливым).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...