Не удается вызвать методы внутри catch или затем вызова Promise

У меня есть метод, который возвращает обещание, например:

    checkLogin(credentials) {
        return new Promise((resolve, reject) => {
            this.http.post(url, credentials)
                .map(res => res.json())
                .subscribe(
                data => {
                    resolve(data);
                },
                err => {
                    reject(err);
                }
            );
        }); 
    }

Я вызываю этот метод внутри другого:

    login(credentials) {
        this.checkLogin(credentials)
            .then(function(result) {
                console.log("ok: ",result);
                this.doAlert("ok");
            })
            .catch(function(err) {
                console.log("error: ",err.message);
                this.doAlert(err.message)
            });
}

Вот где происходит ошибка, говорится «TypeError: this.doAlert не является функцией»:

введите здесь описание изображения

Но doAlert находится в том же файле, что и остальные, и отлично работает из других мест (не обещает звонки)

    doAlert(text) {
        let alert = Alert.create({
            title: 'Alert;,
            subTitle: text,
            buttons: ['Ok']
        });
        this.nav.present(alert);
    }

Разве это невозможно сделать?


person Asenjo    schedule 25.02.2016    source источник


Ответы (2)


Вместо этого используйте функции жирной стрелки

login(credentials) {
    this.checkLogin(credentials)
        .then((result) => {
            console.log("ok: ",result);
            this.doAlert("ok");
        })
        .catch((err) => {
            console.log("error: ",err.message);
            this.doAlert(err.message)
        });
}

сохранить размах

См. также
 — https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html
https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript
- Что означает =› в TypeScript? (жирная стрелка)

person Günter Zöchbauer    schedule 25.02.2016

Используйте стрелочные функции

login(credentials) {
    this.checkLogin(credentials)
        .then((result) => {
            console.log("ok: ",result);
            this.doAlert("ok");
        })
        .catch((err) => {
            console.log("error: ",err.message);
            this.doAlert(err.message)
        });
person kit    schedule 25.02.2016