anchor.diff:    Like `getHeroes`, it also returns a !{_Promise}. 
     But this !{_Promise} waits 2 seconds before resolving the !{_Promise} with mock heroes.
     
  -  像`getHeroes`一样，它也返回一个承诺。
  -  但是，这个承诺会在使用模拟数据完成任务之前等待两秒钟。
  +  像`getHeroes`一样，它也返回一个Promise。
  +  但是，这个Promise会在提供模拟数据之前等待两秒钟。
     
     Back in the `AppComponent`, replace `heroService.getHeroes` with `heroService.getHeroesSlowly`
     and see how the app behaves.
   
     回到`AppComponent`，用`heroService.getHeroesSlowly`替换掉`heroService.getHeroes`，并观察本应用的行为。
  -  
  
positive.code:   
    数据使用者并不知道本服务会如何获取数据。
    我们的`HeroService`服务可以从任何地方获取英雄的数据。
    它可以从网络服务器获取，可以从浏览器的局部存储区获取，也可以是直接写在源码中的mock数据。
    
    That's the beauty of removing data access from the component.
    We can change our minds about the implementation as often as we like,
  
negative.code: :marked
    As a result of our change to `HeroService`, we're now setting `this.heroes` to a !{_Promise} rather than an array of heroes. 
    
    在修改了`HeroService`之后，我们还要把`this.heroes`替换为一个Promise，而不再是一个英雄数组。
    
    We have to change our implementation to *act on the !{_Promise} when it resolves*.
    When the !{_Promise} resolves successfully, *then* we will have heroes to display.
    
    我们得修改这个实现，把它变成*基于Promise*的，并在承诺的事情被解决时再行动。
    一旦Promise被成功解决，我们就会显示英雄数据。
    
    We pass our callback function as an argument to the !{_Promise}'s **then** method:
    
    我们把回调函数作为参数传给Promise对象的**then**函数：
    
  +makeExample('toh-4/ts/app/app.component.ts', 'get-heroes', 'app/app.component.ts (getHeroes - revised)')(format=".")
  
  