2017-08-06 3 views
0

Meteor.setTimeout()を呼び出すと、現在の 'this'のインスタンスが保存され、時間が経過すると呼び出された関数は古いインスタンス(私がMeteor.setTimeout()を呼び出すと保存されたインスタンス)。どのように私は流星の代わりに、この新しいインスタンスを使用することができますか?Meteor.setTimeout()は、現在の 'this'オブジェクトを将来のものの代わりに保存します

// Ending question 
const questionEndToLog =() => this.questionEnd(firstQuestion._id); 
Meteor.setTimeout(questionEndToLog, firstQuestion.time * 1000); 

questionEnd(qId) { 
    const addToGameLog =() => { 
    const questionEnd = new QuestionEnd({ 
     questionId: qId 
    }); 
    this.gameLog = this.gameLog.concat(questionEnd); 
    this.save(); 
    return true; 
    }; 
    const isQuestionEndAlready = !!this.gameLog 
    .filter(e => e.nameType === eventTypes.QuestionEnd) 
    .find(e => e.questionId === qId); 
    return isQuestionEndAlready && addToGameLog(); 
} 

export const QuestionEnd = Class.create({ 
    name: eventTypes.QuestionEnd, 
    fields: { 
    nameType: { 
     type: String, 
     default() { 
     return eventTypes.QuestionEnd; 
     }, 
    }, 
    questionId: { 
     type: String, 
    }, 
    createdAt: { 
     type: Date, 
     default() { 
     return new Date(); 
     }, 
    }, 
    }, 
}); 

this.gameLogは、最も古いログ(Meteor.setTimeout()が呼び出されたときだったログ)の代わりに、新しいものです。

+0

実際に何をしようとしていますか?新しい 'this'を、あなたの遅延関数が存在する場所でアクセスする別の変数に入れる必要があります。 –

答えて

1

これは流星ではありません。 () => ...を使用している場合、の現在のこののコンテキストがこの機能にバインドされます。

関連する問題