Angular 2, как использовать setTimeout?

На странице входа у меня есть эта функция, когда они отправляют страницу:

checkLogin(){
    this.x_userS.getLogin(this.x_userO.login_name, this.x_userO.pwd_plain).then(response => this.x_userO=response);
    (function(){
        setTimeout(() => {
            if (this.x_userO.login_status == "1") {
                this.x_companyS.getCompanyByUser(this.x_userO.user_id).then(response => this.x_companyO=response);
                (function(){setTimeout(() => {
                    this.x_userS.setUser(this.x_userO);
                    this.x_companyS.setCompany(this.x_companyO);
                    this.router.navigate(['HomePage']);
                }, 2000);
            })();
            }
            else {
                window.alert("oops");
            }
        }, 2000);
    })();
}

где x_userS - это служба входа в систему, а x_userO - объект пользователя. Я пытаюсь предоставить promises две секунды, чтобы вернуть данные перед их обработкой. Без setTimeout он не возвращает его вовремя.

Я попытался удалить все, кроме предупреждения, и проверил, что это произошло через две секунды. Однако он не распознает какой-либо другой материал внутри функции() {}, поэтому я считаю, что мне нужно передать все мои службы и объекты.

Кто-нибудь знает, как это сделать?

Ответ 1

Если вы используете function(), то this. не будет указывать на переменные в вашем классе. Используйте () => вместо этого везде.

(function(){ ... })() вокруг setTimeout() по-видимому, избыточно.