2

我正在关注 Angular 2 关于使用 HTTP 请求和 Observables 来搜索数据库的教程。这是具体教程的链接:https ://angular.io/docs/ts/latest/tutorial/toh-pt6.html

您可以搜索“按名称搜索”以找到我所指的教程区域。

这是有问题的代码:

this.heroes = this.searchTerms
  .debounceTime(300)        // wait for 300ms pause in events
  .distinctUntilChanged()   // ignore if next search term is same as previous
  .switchMap(term => term   // switch to new observable each time
    // return the http search observable
    ? this.heroSearchService.search(term)
    // or the observable of empty heroes if no search term
    : Observable.of<Hero[]>([]))
  .catch(error => {
    // TODO: real error handling
    console.log(error);
    return Observable.of<Hero[]>([]);
  });

我能够对此代码进行适当的更改以使其与我的应用程序一起使用,但是我想知道如何在它成功返回数据以及何时无法找到您要查找的内容时调用函数。这样做可能相对简单,但我很难弄清楚并且不太确定如何搜索它。

4

1 回答 1

2

我想知道如何在成功返回数据以及何时无法找到您要查找的内容时调用函数

您仍然需要订阅。在您订阅之前什么都不会发生。

this.searchTerms
  .debounceTime(300)  
  .distinctUntilChanged()
  .switchMap(term => term  
    ? this.heroSearchService.search(term)
    : Observable.of<Hero[]>([]))
  .catch(error => {
    return Observable.of<Hero[]>([]);
  })
  .subscribe(heroes => {
    this.heroes = heroes;
    doOtherStuff();
  });

这是您可以处理“成功”、“错误”和“完成”情况的地方。subscribe 分别接受这三个回调。

 .subscribe(
   (heroes) => {},  // success
   (error) => {},   // error
   () => {}         // completed/always
 );

当它无法找到你要找的东西时

只需检查heroes订阅“成功”中的是否为空。

于 2016-11-08T01:52:59.983 回答