2016-07-25 3 views
0

У меня возникли проблемы с методом window.setInterval(). Ниже приведен пример структуры, метод «repeat» вызывается многократно, однако я не могу вызывать какие-либо методы внутри «repeat». В примере, когда я создаю менеджер (пусть m = новый менеджер()), он напечатает «Before Print», но не распечатает журнал из метода printStuff или сообщение «После печати».typescript window.setInterval() не работает должным образом

Кто-нибудь знает, почему это происходит? Очевидно, это не мой фактический код, поскольку он достаточно прост, чтобы не быть в отдельных функциях, однако мой фактический код должен вызывать многие функции в функции «повторить», и он прекратит выполнение, когда найдет вызов другой функции.

class manager{ 

constructor(){ 
    window.setInterval(this.repeat, 5000); 
} 

repeat(){ 
    console.log("Before Print"); 
    this.printStuff(); 
    console.log("After Print"); 
} 

printStuff(){ 
    console.log("Print Stuff"); 
} 
+0

Try 'setInterval (this.repeat.bind (this), 5000)' - Вы проверяли консоль на наличие сообщений об ошибках? Я бы ожидал, что что-то о 'printStuff' будет неопределенным, потому что то, как вы это делаете, это не то, что вы думаете ... – nnnnnn

+0

Этот вопрос задан сто раз. Пожалуйста, ищите труднее. Вы могли бы отключиться, прочитав, как это работает. –

+0

См. Также http://stackoverflow.com/questions/37802436/why-does-method-on-object-loose-correct-this-binding-in-settimeout. –

ответ

5

Установить интервал будет принимать принимать this.repeat из контекста вы должны либо явно 'привязать' метод с использованием

setInterval(this.repeat.bind(this), 5000)

или

setInterval(()=>this.repeat(), 5000)

+0

'setInterval' не берет ничего из контекста. Контекст теряется в тот момент, когда вы говорите 'this.repeat'. –

+0

не верны времена, все они перераспределяют контекст выполнения функций, поэтому это не означает то же самое, если вы явно не связываете функции –

+0

Я не могу разобрать ваш комментарий. Ничто не «переписывается». Значение 'this.repeat' не имеет контекста для начала. –

Смежные вопросы