我创建了《英雄之旅》,并且有效。
但是我尝试“升级”部分代码,但我做不到。
在hero.service.ts代码中,您具有以下有关搜索的代码部分:
* GET heroes whose name contains search term */
searchHeroes(term: string): Observable<Hero[]> {
if (!term.trim()) {
// if not search term, return empty hero array.
return of([]);
}
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(_ => this.log(`found heroes matching "${term}"`)),
catchError(this.handleError<Hero[]>('searchHeroes', []))
);
}
我的问题是:如果我搜索不存在的诸如“ gol”之类的信息,rteurned消息是:找到与“ gol”匹配的英雄
错误我没有找到英雄。
那么我该如何验证我的可观察对象是否为空?
我尝试一些东西
private hero = new Observable<Hero[]>();
searchHeroes(term: string): Observable<Hero[]> {
this.hero = this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`);
if (!term.trim()) {
// if not search term, return empty hero array.
return of([]); //Seulement si le champ recherche est vide, pas si le retour est vide
}
this.hero = this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`);
console.log(term, this.hero, Hero.length);
if (this.hero !=0) {
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(_ => this.log(`NO heroes matching "${term}"`)),
catchError(this.handleError<Hero[]>('searchHeroes', []))
);
}else{
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(_ => this.log(`found heroes matching "${term}"`)),
catchError(this.handleError<Hero[]>('searchHeroes', []))
);
}
}
它不起作用。那么如何管理可观察对象以了解其是否为空?
谢谢
答案 0 :(得分:3)
可观察到http.get
的返回值。一个完全有效的。因此,检查 observable 是否为0,null等无效,因为它是有效对象。您想要做的是调整处理程序中的逻辑以观察可观察到的辐射。
在这种情况下,如果您想在不返回任何结果时记录其他内容,则可以调整tap
处理程序(tap
是“在观察到的对象发出时也执行此操作”),尽管您可以还可以在subscribe
处理程序中检查此内容。像这样:
if (!term.trim()) {
// if not search term, return empty hero array.
return of([]);
}
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(result => {
if (result.length > 0) {
this.log(`found heroes matching "${term}"`)
} else {
this.log('no matching heroes found');
}
}),
catchError(this.handleError<Hero[]>('searchHeroes', []))