【发布时间】:2020-02-20 01:55:40
【问题描述】:
我正在尝试通过使用两个操作来修改让我开始和停止多个 Firestore 查询的效果。目前,该效果允许我通过侦听效果中的两个单独操作来启动和停止单个 Firestore 查询。当有停止动作时,我只是使用 switchMap 切换到一个空的可观察对象。这工作得很好。
@Effect()
startStopQuery$ = this.actions$.pipe(
ofType(
ActionTypes.START,
ActionTypes.STOP
),
switchMap(action => {
if (action.type === ActionTypes.STOP) {
return of([]);
} else {
return this.afs.collection('collection', ref => {
return ref.where('field', '==', 'x');
}).stateChanges();
}
}),
mergeMap(actions => actions),
map(action => {
return {
type: `[Collection] ${action.type}`,
payload: { id: action.payload.doc.id, ...action.payload.doc.data() }
};
})
);
我真正想做的是进行多个查询,我可以使用这两个相同的操作来启动和停止,但这取决于操作负载。当我每次执行新查询时都修改它时,最后一个停止工作。我认为这是因为 switchMap 运算符从我最后一个可观察的查询中切换。这是我想出的最好的:
@Effect()
startStopQueryById$ = this.actions$.pipe(
ofType(
ActionTypes.START_BY_ID,
ActionTypes.STOP_BY_ID
),
switchMap(action => {
if (action.type === ActionTypes.STOP_BY_ID) {
return of([]);
} else {
return this.afs.collection('collection', ref => {
return ref.where('field', '==', action.id);
}).stateChanges();
}
}),
mergeMap(actions => actions),
map(action => {
return {
type: `[Collection] ${action.type}`,
payload: { id: action.payload.doc.id, ...action.payload.doc.data() }
};
})
);
正如我所说,我认为问题在于 switchMap 运算符。但这也是我首先要使“停止”工作的原因。我似乎无法想出另一种解决方案,因为我还不太熟悉这种风格。
任何帮助将不胜感激!
【问题讨论】:
标签: ngrx