Angular & ngrx effect报错:意外标记,期望构造函数、方法、访问器或属性
问题根源
- rxjs操作符使用错误:你错误将
catchError作为map操作符的第二个参数传入,rxjs的map仅接收正常数据流的转换函数,不支持第二个参数传入错误处理逻辑,错误捕获需要单独使用catchError操作符,和map平级放在pipe参数列表中。 - 括号不匹配:你提供的effect代码存在多余的闭合括号,导致TypeScript无法正确解析类成员属性的语法,触发了Unexpected token. A constructor, method, accessor, or property was expected报错。
修复方案
直接替换你的effect代码为以下版本即可:
addTable = createEffect(() => this.actions.pipe( ofType(TableActions.ActionTypes.preAdd), mergeMap((action: any) => this.tableService.create(action.payload).pipe( // map仅处理正常返回的数据流 map((table) => TableActions.addTable({ payload: table })), // catchError和map平级,处理service调用抛出的错误 catchError((error) => of(TableActions.addTableError({payload: error}))) ) ) ) );
额外注意点
- 建议你将
mergeMap的入参name重命名为action更符合ngrx的语义,避免语义混淆 - 如果开启了TypeScript严格模式,建议给action定义明确的类型,避免用
any
内容的提问来源于stack exchange,提问作者heliot truste
相关产品推荐
相关产品推荐

