【问题标题】:ERROR TypeError: Cannot read property 'pipe' of null in NGRX Effect错误类型错误:无法在 NGRX 效果中读取 null 的属性“管道”
【发布时间】:2019-08-21 16:43:12
【问题描述】:

当我在我的组件中调度我的操作时,应该触发这个 updateTour 效果。但是这个错误出现在我的浏览器控制台core.js:5847 ERROR TypeError: Cannot read property 'pipe' of null at SwitchMapSubscriber.project (updatetour.effects.ts:87) requestHandlerService.invoke(request).pipe 导致错误。有人可以解释这里出了什么问题

updataTour$ = createEffect(() =>
   this.actions$.pipe(
       ofType(TourproviderAction.updateTourprovider),
       switchMap((action) => {
       const data = action.tourProvider;
       const parameters: any = { tourProviderId: '1' };
       const queryParams = new HttpParams({
              fromObject: parameters
       })

        const options = {
                params: queryParams,
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': 'a5sfjdksfjksfe2f4af3673ce1a'
              }
         };

        const request = new ServiceRequest
       (environment.urls.tourProvider, 'POST', formData, options);
        return this.requestHandlerService.invoke(request).pipe(
                map((updateResponce) => {
             const responceData = JSON.stringify(updateResponce)
             return TourproviderAction.updateTourproviderSuccess({ responce: responceData });
                }),
                catchError(err => {
                    const errorMessage = JSON.stringify(err);
                    return of(TourproviderAction.updateTourproviderFail({ errorMessage }))
                })
            );
        })
    )
);

【问题讨论】:

  • 是这个管道requestHandlerService.invoke(request).pipe 导致了错误吗?
  • 是的,这就是原因

标签: angular ngrx ngrx-effects


【解决方案1】:

错误表示这一行

this.requestHandlerService.invoke(request)

正在返回 null 并且无法调用管道函数。确保您从调用方法返回 Observable,以便您可以通过管道传输响应。

【讨论】:

  • 我想知道这些函数是如何调用的。首先执行这个this.requestHandlerService.invoke(request),然后它会调用pipe()
  • 是的,它会先调用this.requestHandlerService.invoke(request),获取响应并传递给管道操作符。
  • 您通常不需要内部管道,只需返回内部可观察对象。在此处查看 stackblitz stackblitz.com/edit/rxjs-learnings?file=nested-subscribe.ts 并在此处查看答案以处理嵌套订阅。 stackoverflow.com/questions/57562159/…希望对你有帮助
【解决方案2】:

确保 requestHandlerService.invoke(request) 返回 Observables

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多