Как установить наблюдаемые свойства async в машинописи?

У меня есть несколько свойств, которые выбираются асинхронно. Я хотел бы привязать результат этих свойств к представлению в моем приложении. Тем не менее get свойства видят переменные модели представления как нулевые. Как я могу связать их после достижения результата? В приведенном ниже коде userEmail а также appVersion имеют значение null/undefined в соответствующих функциях get.

export class AccountViewModel extends Observable {
    private _userEmail : Email;
    private _appVersion : string;

    constructor() {
        super();

        appVersion.getVersionName().then(
            (result) =>
            {
                this._appVersion = result;
                console.log(this._appVersion);
            });

        firebase.getCurrentUser().then(
            (result) => {
                this._userEmail = new Email(result.email);
            });
    }

    get userEmail(): string {
        return this._userEmail != null ? this._userEmail.Value : "";
    }

    get appVersion(): string {
        return this._appVersion;
    }

    public logout() {
        firebase.logout().then((result) => {
            Navigator.navigateTo({
                moduleName : "views/register/register",
                backstackVisible : false,
                clearHistory : true
            })
        }).catch((error) => {
            dialogs.alert({
                title: "Error",
                message: "A system error occurred trying to logout.",
                okButtonText: "Ok"
            });
        });
    }
}

1 ответ

Класс Observable имеет метод notifyPropertyChange:)

export class AccountViewModel extends Observable {
    private _appVersion : string;

    constructor() {
        super();

        appVersion.getVersionName().then((result) => {
            this._appVersion = result;
            this.notifyPropertyChange("appVersion", this._appVersion);
        });
    }

    get appVersion() : string {
        return this._appVersion;
    }

    public logout() {
        firebase.logout().then((result) => {
            Navigator.navigateTo({
                moduleName : "views/register/register",
                backstackVisible : false,
                clearHistory : true
            })
        }).catch((error) => {
            dialogs.alert({
                title: "Error",
                message: "A system error occurred trying to logout.",
                okButtonText: "Ok"
            });
        });
    }
}
Другие вопросы по тегам