anchor.diff:      Our simple example prints the error to the console; a real life application should do better.
       Then we return an observable containing an empty array to clear the search result.
       
  -    * `catch`拦截失败的Observable。这个简单的例子中只是把错误信息打印到控制台（但实际的应用需要做更多事），然后返回一个包含空数组的可观察对象，以清空搜索结果。
  +    * `catch`拦截失败的可观察对象。这个简单的例子中只是把错误信息打印到控制台（但实际的应用需要做更多事），然后返回一个包含空数组的可观察对象，以清空搜索结果。
   
       ### Import RxJS operators
       
  
positive.code:   It may have seemed like overkill at the time, but we were anticipating the
    day when we fetched heroes with an HTTP client and we knew that would have to be an asynchronous operation.
  
    我们返回一个promise，它用mock版的英雄列表进行解析。
    在当时，它可能看起来做得有点过分了，不过那时候我们就预料到有这么这一天会通过一个http客户端来获取英雄数据，而且我们知道，那必然是一个异步操作。
  
    That day has arrived! Let's convert `getHeroes()` to use HTTP.
  
  
negative.code:     That operator converted the `Observable` into a `Promise` and we passed that promise back to the caller.
      
      快速回忆一下`HeroService`，它在`http.get`返回的`Observable`后面串联了一个`toPromise`操作符。
      该操作符把`Observable`转换成了`Promise`，并且我们把那个承诺返回给了调用者。
  
      Converting to a promise is often a good choice. We typically ask `http.get` to fetch a single chunk of data.
      When we receive the data, we're done.
  