Typescript - Глобальная функция?

Я пытаюсь вызвать функцию из 5-глубокой вложенной функции в Typescript, и она не может видеть внешнюю функцию. Выполнение console.log(this) внутри setTimeout возвращает объект window.

export class SearchComponent implements OnInit {


lifeCycleFunc(){    //Function 1
    ...

    if() {                //Function 2
        ....

        var.do(item => {        //Function 3
            ....

            var.forEach(var => {      //Function 4
                ...

                setTimeout(function(){    //Function 5

                    this.searchFunc()        //this.searchForAssignments is not a function
                }
            })
        })
    }
}

searchFunc(){
    ...
}


}

Ответ 1

this контекст внутри setTimeout обратный вызов будет глобальным объектом (window), но для этого кода должен быть класс SearchComponent. Чтобы добиться того, что все вложенные функции, включая setTimeout обратный вызов, должны быть функциями стрелок для правильного связывания контекста this:

export class SearchComponent implements OnInit {    
    lifeCycleFunc(){
        ...

        if(condition) {
            ...

            foo.do(bar => {
                ...

                bar.forEach(baz => {
                    ...

                    setTimeout(() => {  
                        this.searchFunc();
                    }, 0);
                });
           });
       }
    }

    searchFunc(){
      ...
    }
}

Ответ 2

var.forEach(var => {    //Function 3
            ...

            this.searchFunc()     //TypeError: this.searchForAssignments is not a function
        }.bind(this))

Ссылка this внутри forEach является функцией forEach. Вам нужно привязать его к этой ссылке класса.