使用 Angular NGRX 和 Firestore,set() 方法返回 undefined



我用Angular 7,Firestore和ngRx做了一个项目。

我正在编写效果,但set(( 方法无法正常工作。

使用 firestore add((方法时,它工作正常,因为我得到了一个文档引用(见点击(

(水龙头仅用于测试目的(

服务.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
);
}

效果.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(( 方法时,我变得未定义(见点击(

服务.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
);
}

效果.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))))
);
})
);

所以我的效果是试图得到一个ID,但他没有定义。

为什么这对add(( 而不是 set((/update((有效?

这是我的项目:https://github.com/angulartist/ngrx-firestore-playground/blob/master/src/products/services/products.service.ts

谢谢你的帮助

令人沮丧的是,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
);
}

最新更新