Проблема в том, что значение this
изменилось.Каждый раз, когда вы вводите новую функцию (как объявлено с ключевым словом function
), значение this
изменяется.В данном конкретном случае виновата только функция, вызываемая setTimeout
:
setTimeout(function() {
this.updateProgress(statusurl)
}, 2000)
В прошедшие годы решением было бы получить ссылку на this
под другим именем:
var me = this
setTimeout(function() {
me.updateProgress(statusurl)
}, 2000)
Немного меньше старой школы будет использовать bind
, как и у вас для других вложенных функций:
setTimeout(function() {
this.updateProgress(statusurl)
}.bind(this), 2000)
Если у вас есть функции со стрелками ES6 (и, судя по вашему catch
может показаться, что у вас есть) тогда вам даже не нужно использовать bind
.Функции стрелок не изменяют значение this
, поэтому вы можете просто написать:
setTimeout(() => {
this.updateProgress(statusurl)
}, 2000)
Аналогичным образом можно удалить другое использование bind
.