используя angular ngrx и firestore, метод set () возвращает undefined - PullRequest
0 голосов
/ 21 октября 2018

Я создал проект, используя Angular 7, Firestore и ngRx.

Я пишу свои эффекты, а метод set () не работает должным образом.

Когдаиспользуя метод firestore add () , он работает нормально, потому что я получаю DocumentReference (см. нажмите)

(сигнал используется только для целей тестирования)

service.ts

createProduct(data): Observable<any> {
        return from(this.db.collection('slack').add({
            ...data
        })).pipe(
            tap(a => console.log('create: ', a))
            // here I get back a DocumentReference
        );
 }

effect.ts

@Effect()
    createProduct$ = this.actions$.ofType(productsActions.CREATE_PRODUCT)
        .pipe(
            map((action: productsActions.CreateProduct) => action.payload),
            switchMap((product) => {
                return this.productService.createProduct(product)
                    .pipe(
                        map(_product => new productsActions.CreateProductSuccess(_product)),
                        catchError((err => of(new productsActions.CreateProductFail(err))))
                    );
            })
        );

, но при использовании set ()метод , я получаю не определено (см. нажмите)

service.ts

updateProduct(data): Observable<any> {
        return from(this.db.doc(`slack/0aMwkyVWF33PF7qDIvKy`).set({
            ...data,
        })).pipe(
            tap(a => console.log('update: ', a))
            // Here I get undefined
        );
}

effect.ts

@Effect()
    updateProduct$ = this.actions$.ofType(productsActions.UPDATE_PRODUCT)
        .pipe(
            map((action: productsActions.UpdateProduct) => action.payload),
            switchMap((product) => {
                return this.productService.updateProduct(product)
                    .pipe(
                        map(_product => new productsActions.UpdateProductSuccess(_product)),
                        catchError((err => of(new productsActions.UpdateProductFail(err))))
                    );
            })
        );

Таким образом, мой эффект требует получения идентификатора, но он не определен.

Почему это работает для add () , а не для set () / update () ?

вот мой проект: https://github.com/angulartist/ngrx-firestore-playground/blob/master/src/products/services/products.service.ts

спасибо за помощь

1 Ответ

0 голосов
/ 25 марта 2019

Разочарованно set() не возвращает ссылку на документ.Таким образом, в вашем сервисе после завершения set() вы можете затем направить поток и выполнить карту, чтобы вы могли получить ссылку на документ, который вы выполнили set().Затем вы можете switchMap() и get() недавно обновленный документ.

updateProduct(data): Observable<any> {
        return from(this.db.doc(`slack/0aMwkyVWF33PF7qDIvKy`).set({
            ...data,
        })).pipe(
            map(_ => this.db.doc(`slack/0aMwkyVWF33PF7qDIvKy`)),
            switchMap(docRef => fromPromise(docRef.get())),
            tap(a => console.log('update: ', a))
            // Here I get undefined
        );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...