NgRx问题:Effect未调用API接口求助
NgRx Effect未调用API的问题修复
你的Effect能被Action触发但未调用API,核心问题是mergeMap中没有正确返回API调用的可观察对象/Promise,导致异步流未触发实际请求。
问题代码分析
你当前的Effect代码里,mergeMap内的async函数仅执行了this.moviesService.createMovie(movie.model),但没有返回该调用结果:
- 如果
createMovie返回的是冷Observable,这类Observable只有被订阅时才会执行,而你未返回它,导致流中没有订阅触发API请求; - 如果
createMovie返回的是Promise,async函数未返回结果会导致mergeMap无法处理该异步操作,请求被直接丢弃。
修复方案
根据moviesService.createMovie的返回类型,选择对应修复方式:
情况1:返回Observable
直接返回service方法的结果,无需async:
onCreateMovies$ = createEffect(() => this.actions$.pipe( ofType(createMovie), mergeMap(movie => this.moviesService.createMovie(movie.model)) ), { dispatch: false });
情况2:返回Promise
两种写法任选其一:
// 方式1:使用await返回结果 onCreateMovies$ = createEffect(() => this.actions$.pipe( ofType(createMovie), mergeMap(async movie => await this.moviesService.createMovie(movie.model)) ), { dispatch: false }); // 方式2:直接返回Promise onCreateMovies$ = createEffect(() => this.actions$.pipe( ofType(createMovie), mergeMap(movie => this.moviesService.createMovie(movie.model)) ), { dispatch: false });
你在非NgRx环境下能正常调用API,说明createMovie方法本身无异常,只需按上述方式在Effect中正确返回调用结果,即可触发API请求。
内容的提问来源于stack exchange,提问作者user17816100
相关产品推荐
相关产品推荐

