我在我的控制台中得到了这个。由于它没有指向我的代码,我不知道这是怎么回事。
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);
});
}
在我的例子中,这个错误是由一个 "循环引用 "引起的。基本上,这个错误与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,在那里我把我想发布的对象一起发到服务器上。