我尝试在NGRX效果中返回多个动作时遇到一些困难。我知道如何返回多个动作,但我正在尝试根据布尔值设置两组动作。
代码如下:
@Effect()
loadCompanyDetail = this.actions$
.ofType(fromActions.COMPANY_DETAIL_LOAD)
.pipe(
switchMap(() => {
return this.companyService
.getCompanyByID(
fromUtility.obs2Str(
this.routerStore.select(fromRouter.getCompanyId)
)
)
.pipe(
switchMap(res => {
switch (res.success) {
case true:
const locations = res.data.locations;
const detail = res.data;
delete res.data.locations;
return [
new fromActions.CompanyDetailLoadSuccess(detail),
new fromActions.CompanyLocationsLoadSuccess(locations)
];
case false:
return [
// new fromActions.CompanyDetailLoadFailure(),
// new fromActions.CompanyLocationsLoadFailure()
];
}
})
);
})
);
活动时注释掉的操作会引发以下错误:
src / company / store / effects / company-detail.effects.ts(34,23)中的错误: 错误TS2345:类型的参数'(res:{success:boolean; msg:string; 数据:公司; })=> (CompanyDetailLoadSuccess | CompanyLo ...'不是 可分配给类型'的参数(值:{success:boolean; msg: 串;数据:公司; },index:number)=> ObservableInput”。 类型'(CompanyDetailLoadFailure | CompanyLocationsLoadFailure)[]'不能分配给'ObservableInput'类型。 类型'(CompanyDetailLoadFailure | CompanyLocationsLoadFailure)[]'不能分配给类型 'ArrayLike'。 索引签名不兼容。 输入'CompanyDetailLoadFailure | CompanyLocationsLoadFailure'不能分配给类型 'CompanyDetailLoadSuccess | CompanyLocationsLoadSuccess'。 类型'CompanyDetailLoadFailure'不能分配给'CompanyDetailLoadSuccess | CompanyLocationsLoadSuccess'。 类型'CompanyDetailLoadFailure'不能分配给'CompanyLocationsLoadSuccess'。 属性“类型”的类型不兼容。 键入“”[公司详细信息]加载失败“'不能分配给类型'”[公司位置]加载成功“'。
我也尝试使用if - else而不是switch case。
包含我要触发的操作的操作文件如下:
import { Action } from '@ngrx/store';
export const COMPANY_DETAIL_LOAD = '[COMPANY DETAIL] Load';
export const COMPANY_DETAIL_LOAD_SUCCESS = '[COMPANY DETAIL] Load Success';
export const COMPANY_DETAIL_LOAD_FAILURE = '[COMPANY DETAIL] Load Failure';
export class CompanyDetailLoad implements Action {
readonly type = COMPANY_DETAIL_LOAD;
}
export class CompanyDetailLoadSuccess implements Action {
readonly type = COMPANY_DETAIL_LOAD_SUCCESS;
constructor(public payload: any) {}
}
export class CompanyDetailLoadFailure implements Action {
readonly type = COMPANY_DETAIL_LOAD_FAILURE;
}
export type CompanyDetailActions =
| CompanyDetailLoad
| CompanyDetailLoadSuccess
| CompanyDetailLoadFailure;
CompanyLocationsLoadFailure与CompanyDetailLoadFailure完全相同。
非常感谢任何帮助。
提前致谢。