Angularfire2 - не сохранение данных результатов - PullRequest
0 голосов
/ 05 июля 2018

Я думаю, это потому, что я на самом деле не знаю, как делать то, что я хочу правильно. По сути, я сохраняю связь между пользователем и школой (также пользователем), и в новом документе я хочу получить некоторые URL-адреса изображений от пользователя школы. Мои запросы для этого оба возвращают неопределенное ...

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

Результат выводится на консоль нормально ....

private addUserSchool(userId: string, school: any) {

    const concatId = this.concatIds(userId, school.uid);

    const userSchoolsRef: AngularFirestoreDocument<any> = this.afs.doc(`userSchools/${concatId}`);
    const schoolRef: AngularFirestoreDocument<any> = this.afs.doc(`users/${school.uid}`);
    let schoolImageURL;
    let schoolImageLogoURL;

    if(school.active) {

        schoolRef.valueChanges().subscribe(result => {
            console.log(result)
            return schoolImageURL = result.schoolImageURL;
        });
    }

    schoolRef.valueChanges().subscribe(result => {
        console.log(result)
        return schoolImageLogoURL = result.schoolImageLogoURL;
    })

    // create model from this.
    const data = {
        userId: userId,
        schoolId: school.uid,
        active: school.active ? school.active : false,
        activeSchoolImageURL: schoolImageURL ? schoolImageURL : null,
        activeSchoolLogoURL: schoolImageLogoURL ? schoolImageLogoURL : null
    }

    return userSchoolsRef.set(data, { merge: true })
}

1 Ответ

0 голосов
/ 05 июля 2018

Как указано в комментариях, значения еще не доступны, когда вы делаете set вызов.

Вы можете использовать другой оператор rxjs для выполнения set, когда доступны значения первого вызова:

private addUserSchool(userId: string, school: any): any {

    const concatId = this.concatIds(userId, school.uid);

    const userSchoolsRef: AngularFirestoreDocument<any> = this.afs.doc(`userSchools/${concatId}`);
    const schoolRef: AngularFirestoreDocument<any> = this.afs.doc(`users/${school.uid}`);

    schoolRef.valueChanges()
        .pipe(
            take(1),
            switchMap(schoolData => {
                const data = {
                    userId: userId,
                    schoolId: school.uid,
                    active: school.active,
                    activeSchoolImageURL: school.active ? schoolData.schoolImageURL : null,
                    activeSchoolLogoURL: schoolData.schoolImageLogoURL
                };
                return of(userSchoolsRef.set(data, { merge: true }));
            })
        )
        .subscribe();
}
...