试图理解角2中的承诺

时间:2016-08-29 21:46:50

标签: javascript angular typescript angular-promise observable

我已经为google API创建了一个服务,并在promise响应中堆叠。让我告诉你我的代码:

getPromise: Promise<any>;
loadSheets: Array<any>;

constructor(public _checkAuthApiService: CheckAuthApiService) { }

ngOnInit() {
    if (this._checkAuthApiService) {
        this._checkAuthApiService.checkAuth().then(res => {
            if (res && !res.error) {
                this.loadSheetsFunc();
            }
        });
    }

    //setTimeout(function(){},1000); //When i add this it works :(
}

loadSheetsFunc = () => {
    this.getPromise = new Promise((resolve: any, reject: any) => {
        resolve(this._checkAuthApiService.loadSheetsApi())
    });
    this.getPromise.then((res: any) => this.sheetsResults(res));
};

sheetsResults = (res: any) => this.loadSheets = res.result.values;

不确定我缺少什么但是当我在seTimeout ti中添加ngOnInit时,我会在视图中获得我想要的数据。有人可以帮我解决这个代码,或者建议我使用Observables更好的方法。先感谢您。

1 个答案:

答案 0 :(得分:0)

setTimeout()导致完整的Angular2变化检测周期,这就是为什么这会使Angular2识别更新的属性。

Angular2没有识别更新而没有setTimeout()表示polyfills有问题(可能是加载订单)。

我会对您的代码进行一些更改

loadSheets: Array<any>;

constructor(public _checkAuthApiService: CheckAuthApiService) { }
ngOnInit() {
    if (this._checkAuthApiService) {
        this._checkAuthApiService.checkAuth().then(res => {
            if (res && !res.error) {
                this.loadSheetsFunc();
            }
        });
    }
}

loadSheetsFunc() {
    this._checkAuthApiService.loadSheetsApi()
    subscribe(val => this.sheetsResults(res));
}

sheetsResults(res: any) {
    this.loadSheets = res.result.values;
}

我不知道loadSheetsApi()返回的内容(假设为Observable)。