等到使用TypeScript在Angular2中收到响应

时间:2018-01-19 09:45:16

标签: typescript async-await asp.net-web-api2 angular2-services

实际上我需要等到来自打字稿的webapi调用的响应。代码如下:

if (this.parcelId) {
            if (this.getAssetLocationMappedParcels(this.parcelId)) {
                this.showConfirmModal = true;
                this.modalContent = this.translation.translate('property-tax/mapped-asset-location-warning-message',
                    { 'parcelName': this.currentEntity.name });
            } else {
                this.updateParcel();
            }
        }

private getAssetLocationMappedParcels(parcelId: number): boolean {
        let hasMappedRecord: boolean = false;
        this.counter++;
        this.mappedAssetLocationSub = this.apiService.fetchAll(`assetlocationtaxlocationtaxparcel/${parcelId}/parcel`)
            .finally(
            () => this.counter--
            )
            .subscribe(options => {
                hasMappedRecord = (options.count > 0);
            },
            err => {
                this.handleError(err || err.message);
            }
            );
        return hasMappedRecord;
    }

所以我的问题是条件 if(getAssetLocationMappedParcels(id))被传递并在之后的else条件下执行,该方法返回值为true / false; 为此,我需要等到该方法返回响应。 任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个异步世界,所以你必须使用这个“约束”。

我认为除了订阅之外还有其他解决方案:

this.getAssetLocationMappedParcels(this.parcelId)
    .subscribe(isLoaded => {
       if (isLoaded) {
         this.showConfirmModal = true;
         this.modalContent = this.translation
             .translate(
                 'property-tax/mapped-asset-location-warning-message', 
                 {'parcelName': this.currentEntity.name}
             );
       } else 
         this.updateParcel();
      })