【问题标题】:You provided 'undefined' where a stream was expected您在预期流的位置提供了“未定义”
【发布时间】:2020-03-10 15:33:31
【问题描述】:

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

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);
    });
}

【问题讨论】:

  • 它告诉你你调用了 .subscribe() 的东西不是 Observable
  • 我用实际通话更新了我的问题。
  • 我知道它发生在哪里,但仍然不知道为什么。我也有一个拦截器。我已将其代码添加到我的问题中。如果我不这样做 .pipe 我不会收到消息。
  • 你确定它在提供的代码行上吗?能否提供服务功能,如何调用?
  • @Chund。不,没有帮助。

标签: angular rxjs6


【解决方案1】:

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

我基本上拥有的是 2 个对象:

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

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

当我检索到具有 Pets 列表的 Persons 列表时,我想将所有 pet.owner 与其父 Person 相关联,因为在从服务器检索后这些通过引用将不同。所以我有这个代码:

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

现在我有对象的循环引用:person1 有 pet1 链接到所有者 person1 有 pet1 链接到...等...

当 person1 试图序列化为 json 时,json 显然不知道在哪里停止并且可能返回一个未定义的。这个 undefined 被传递给 rxjs,它需要一个流、可观察的等,这会导致错误。

因此,如果您曾经遇到此错误,并且您检查了所有建议的选项,但没有一个建议有效,请检查您在 rxjs 操作中使用的对象。在我的情况下,它是 HttpClient.post,我将我想要发布到服务器的对象发送到该处。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2018-11-08
    • 2023-04-06
    • 2021-05-21
    • 2021-11-29
    • 2021-12-10
    • 1970-01-01
    • 2018-09-07
    • 2018-05-31
    相关资源
    最近更新 更多