ここでは何がgongであるのかを理解しようとしています。関数を別の方法で呼び出します。ここで最初のエラーを生成します方法です:@Injectable
でコールバックはAngular2/Firebaseの "TypeError:this is undefined"を生成します
player.service.ts file
私は持っているが
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 => {
let board = snap.val();
//do stuff with 'board' object
});
}
room.component.ts file
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);
}
};
}
call non-working version like this
activateTimer(room.id, room.name, _playerService.postGameActions)
エラー:
EXCEPTION: TypeError: this is undefined
Working version
このように立派に動作しますが、私が呼ぶとき、 'これは' 定義されていないのはなぜactivateTimer
以来setInterval()
のない使用は、単にサービスメソッド
room.component.ts file
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);
call working version like this
activateTimer(room.id, room.name)
を呼び出していませんコールバックとしてpostGameActions
?私はあなたが矢印関数に呼び出しをラップする必要が
:
もう一つの方法は、bindメソッドを使用するのでしょうか? –