【发布时间】:2019-11-21 18:37:28
【问题描述】:
可能有不同的方法来解决它(比如创建另一个选择器,特别是针对错误)
export const getMSFState = createFeatureSelector<STState>('st');
export const selectCreatedSensor = createSelector(
getMSFState,
selectAllSensors,
(state: STState, sensorArray: SeasonTotals[], props: { blockId: number}) => {
const isSuccessCreate = state.action === fromST.ST_ADD_ELEMENT && !state.loading && !state.error;
const isAnErrorCreate = state.action === fromST.ST_ADD_ELEMENT && !state.loading && state.error;
if (isAnErrorCreate) {
return throwError('Error X');
}
const blockSensors = [...sensorArray].filter(s => s.blockId = props.blockId);
return isSuccessCreate ? blockSensors.pop() : null;
}
);
我想捕捉第二个订阅参数(错误之一),但我不知道是否可以在 NgRx 选择器中发出它
this.store.pipe(
select(STSelectors.selectCreatedSensor, { blockId: this.id })
).subscribe((data) => {
console.log('success creation', data);
}, (error) => {
// I can't catch this, instead I catch it in the first subscribe parameter (in the success one)
// And the value emited is an Observable object
console.log('something went wrong', error);
})
【问题讨论】:
-
我们需要更多细节。你到底想发生什么?
-
不,这是不可能的,
selector不返回可观察对象,它总是返回一个值,因此您不能使用throwError -
谢谢@Nickolaus,那么你建议做什么作为替代方案?也许为捕获错误创建另一个选择器?
-
...如果您使用
return new Error('xxx')而不是throwError会发生什么事情会很有趣 -
我的建议是创建一个错误属性,并在满足 X 条件时使用减速器填充该属性。如果您需要跨状态执行此操作(组合状态的不同部分),请使用效果来更新减速器。
标签: angular rxjs ngrx ngrx-entity