你提供了 "未定义",而在这里,一个流是预期的。

问题描述 投票:0回答:1

我在我的控制台中得到了这个。由于它没有指向我的代码,我不知道这是怎么回事。

TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:28)
at subscribeToResult (subscribeToResult.js:15)
at CatchSubscriber.push../node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:43)
at CatchSubscriber.push../node_modules/rxjs/_esm5/internal/OuterSubscriber.js.OuterSubscriber.notifyError (OuterSubscriber.js:13)
at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/InnerSubscriber.js.InnerSubscriber._error (InnerSubscriber.js:18)
at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
at Observable._subscribe (throwError.js:5)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:43)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js:29)
at subscribeToResult (subscribeToResult.js:13)

谁能帮帮我?

更新。这里是实际的调用。

this.http.get(`${environment.apiUrl}/api/home/`)
   .subscribe((data: any) => {console.log(data);
});

更新2. 这里是我的拦截器,它最像发生在这里。

 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  // add authorization header with jwt token if available
  request = this.addTokenToRequest(request);
  return next.handle(request);
  // .pipe(
  //   catchError((error: HttpErrorResponse) => {
  //     if (error instanceof HttpErrorResponse) {
  //       switch (error.status) {
  //         case 406: {
  //           return this.handle406Error(request, next);
  //         }
  //         // case 'Unauthorized': {
  //         //   // return this.handle401Error(request, next);
  //         // }
  //     }}
  //   }));
}

所以,如果我注释掉 .pipe 我没有收到消息。但如果有错误我还是想处理一下。

更新3.这里是初始调用。

ngOnInit(): void {    
    this.http.get(`${environment.apiUrl}/api/web/home/`)
      .subscribe((data: any) => {
        console.log(data);
    });
}
angular rxjs6
1个回答
0
投票

在我的例子中,这个错误是由一个 "循环引用 "引起的。基本上,这个错误与rxjs没有任何关系。至少不是直接的,是json序列化出了问题,所以这个错误实际上是非常误导人的。

我基本的是2个对象。

class Person {
    id: number;
    pets: Pet[];
}

class Pet {
    id: number;
    owner: Person;
}

当我检索一个Person的列表时,我有一个Pets的列表,我想把所有的pet. owner和他们的父Person联系起来,因为从服务器上检索后,这些Person的引用是不一样的。所以我有这样的代码。

persons.forEach(person => person.pets.forEach(pet => pet.owner = person));

现在我有一个循环引用的对象:person1有pet1,它被链接到所有者person1有pet1,它被链接到......等等。

当person1试图被序列化为json时,json显然不知道在哪里停止,可能返回一个undefined。而这个undefined被传递给rxjs,在那里它期望一个流,observable等,这就是错误的结果。

所以,如果你曾经遇到过这样的错误,你检查了所有建议的选项,但没有一个建议可行,检查你在rxjs操作中使用的对象。在我的例子中,是HttpClient.post,在那里我把我想发布的对象一起发到服务器上。

© www.soinside.com 2019 - 2024. All rights reserved.