title: Callback generates "TypeError: this is undefined" in Angular2/Firebase
body: <p>I'm trying to understand what is gong on here and why I'm getting an error if I call a function a certain way and not getting the error when i call the function a different way.  Here is the way that produces the error first:</p>
  
  <blockquote>
    <p>player.service.ts file</p>
  </blockquote>
  
  <p>in the <code>@Injectable</code> i have </p>
  
  <pre><code>private roomsRef: Firebase;
  
  constructor() {
      this.roomsRef   = new Firebase("https://xxx.firebaseio.com/rooms");
  }
  
  postGameActions(roomId: string) {
          console.log("post game actions start on " + roomId);
  
  //error on below 'this'        
          this.roomsRef.child(roomId).child("board").once("value", snap =&gt; {
             let board = snap.val();
             //do stuff with 'board' object
          });
  }
  </code></pre>
  
  <blockquote>
    <p>room.component.ts file</p>
  </blockquote>
  
  <pre><code>activateTimer(roomId: string, roomName: string, callback) {
      var timer = setInterval(redirectTimer, 1000);
      var seconds: number = 5;
      var timerHtml = document.getElementById("divRedirectTimer" + roomName);
      timerHtml.innerHTML = "[" + seconds + "]";
  
      function redirectTimer() {
          timerHtml.innerHTML = "[" + (seconds--) + "]";
          if(seconds === 0) {
              clearInterval(timer);
              callback(roomId);
          }
      };
  }
  </code></pre>
  
  <blockquote>
    <p>call non-working version like this</p>
  </blockquote>
  
  <pre><code>activateTimer(room.id, room.name, _playerService.postGameActions)
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>EXCEPTION: TypeError: this is undefined
  </code></pre>
  
  <blockquote>
    <p>Working version</p>
  </blockquote>
  
  <p>Works fine when like this but no use of <code>setInterval()</code> since <code>activateTimer</code> just calls the service method</p>
  
  <blockquote>
    <p>room.component.ts file</p>
  </blockquote>
  
  <pre><code>activateTimer(roomId: string, roomName: string) {
      var timer = setInterval(redirectTimer, 1000);
      var seconds: number = 5;
      var timerHtml = document.getElementById("divRedirectTimer" + roomName);
      timerHtml.innerHTML = "[" + seconds + "]";
  
      function redirectTimer() {
          timerHtml.innerHTML = "[" + (seconds--) + "]";
          if(seconds === 0) {
              clearInterval(timer);
          }
      }
  
      this._playerService.postGameActions(roomId);
  </code></pre>
  
  <blockquote>
    <p>call working version like this</p>
  </blockquote>
  
  <pre><code>activateTimer(room.id, room.name)
  </code></pre>
  
  <p>Why is the 'this' undefined when i call <code>postGameActions</code> as a callback?  I'm sure I'm missing something simple here</p>