TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable

前端 未结 20 1123
时光说笑
时光说笑 2020-12-01 06:22

I am trying to map from a service call but getting an error. Looked at subscribe is not defined in angular 2? and it said that in order to subscribe we need to

20条回答
  •  伪装坚强ぢ
    2020-12-01 06:48

    In my case the error occurred only during e2e tests. It was caused by throwError in my AuthenticationInterceptor.

    I imported it from a wrong source because I used WebStorm's import feature. I am using RxJS 6.2.

    Wrong:

    import { throwError } from 'rxjs/internal/observable/throwError';
    

    Correct:

    import { throwError } from 'rxjs';
    

    Here the full code of the interceptor:

    import { Injectable } from '@angular/core';
    import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
    import { Observable, throwError } from 'rxjs';
    import { catchError } from 'rxjs/operators';
    
    @Injectable()
    export class AuthenticationInterceptor implements HttpInterceptor {
    
      intercept(req: HttpRequest, next: HttpHandler): Observable> {
        const reqWithCredentials = req.clone({withCredentials: true});
        return next.handle(reqWithCredentials)
         .pipe(
            catchError(error => {
              if (error.status === 401 || error.status === 403) {
                // handle error
              }
              return throwError(error);
            })
         );
      }
    }
    

提交回复
热议问题