AngularFire2 promises into Observable 类型问题
AngularFire2 promises into Observable type Issues
我正在尝试将 angularfire2 的承诺映射到类型化的可观察对象中。这是我的 class:
export class RestService<T extends Entity> {
constructor(
protected afAuth: AngularFireAuth,
protected store: AngularFirestore,
protected readonly collectionName: string) {
this.collection = store.collection<T>(collectionName);
}
protected collection: AngularFirestoreCollection<any>;
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
map(action => mapActionArray(action)),
catchError((error: any) => {
throw new ApiError(error);
})
)
);
}
}
/**
* Override Firestore errors with common app errors.
* @param error - Firestore error
*/
function mapError(error: any): Observable<ApiError> {
return throwError(new ApiError(error));
}
function mapDocument<T extends Entity>(doc: DocumentSnapshot<any>): T {
return {
id: doc.id,
...doc.data()
};
}
注意 all() 方法,我想映射 catchError 中的任何错误,但问题是我得到了这种类型的错误:
TS2322: Type 'Observable<{}[]>' is not assignable to type 'Observable'. Type '{}[]' is not assignable to type 'T[]'. Type '{}' is not assignable to type 'T'.
我通过将 return 类型更改为 Observable<{} | 来修复它Array>,但是每当我使用此服务时都需要使用相同的类型,我觉得这不太好。
我该如何解决这个问题?我希望能够输入我的服务并预先将错误映射到适当的 CustomError 对象(这包括将代码映射到消息)。
顺便说一句,我也试过使用 RXJS 的 throwError。
提前致谢。
回答我自己的问题,我必须在地图运算符之前使用 catchError。所以:
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
map(action => mapActionArray(action)),
catchError((error: any) => {
throw new ApiError(error);
})
)
);
}
会变成
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
catchError((error: any) => {
throw new ApiError(error);
}),
map(action => mapActionArray(action))
)
);
}
希望对您有所帮助
我正在尝试将 angularfire2 的承诺映射到类型化的可观察对象中。这是我的 class:
export class RestService<T extends Entity> {
constructor(
protected afAuth: AngularFireAuth,
protected store: AngularFirestore,
protected readonly collectionName: string) {
this.collection = store.collection<T>(collectionName);
}
protected collection: AngularFirestoreCollection<any>;
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
map(action => mapActionArray(action)),
catchError((error: any) => {
throw new ApiError(error);
})
)
);
}
}
/**
* Override Firestore errors with common app errors.
* @param error - Firestore error
*/
function mapError(error: any): Observable<ApiError> {
return throwError(new ApiError(error));
}
function mapDocument<T extends Entity>(doc: DocumentSnapshot<any>): T {
return {
id: doc.id,
...doc.data()
};
}
注意 all() 方法,我想映射 catchError 中的任何错误,但问题是我得到了这种类型的错误:
TS2322: Type 'Observable<{}[]>' is not assignable to type 'Observable'. Type '{}[]' is not assignable to type 'T[]'. Type '{}' is not assignable to type 'T'.
我通过将 return 类型更改为 Observable<{} | 来修复它Array>,但是每当我使用此服务时都需要使用相同的类型,我觉得这不太好。 我该如何解决这个问题?我希望能够输入我的服务并预先将错误映射到适当的 CustomError 对象(这包括将代码映射到消息)。
顺便说一句,我也试过使用 RXJS 的 throwError。
提前致谢。
回答我自己的问题,我必须在地图运算符之前使用 catchError。所以:
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
map(action => mapActionArray(action)),
catchError((error: any) => {
throw new ApiError(error);
})
)
);
}
会变成
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
catchError((error: any) => {
throw new ApiError(error);
}),
map(action => mapActionArray(action))
)
);
}
希望对您有所帮助