2016-03-23 157 views
0

我是新的Angular 2.我有一種情況,當一個承諾到另一個,我有錯誤消息與http.post工作到以下代碼。我應該如何使用angular 2承諾承諾

。然後

在這裏?

export class KeyValue { 
    constructor(
     private OrganizationId: string, 
     private OrganizationFriendlyName: string) { 
    } 
} 

export interface IComponentData { 
    title: string; 
    signInUrl: string; 
    orgFriendlyName: KeyValue[]; 
} 

@Injectable() 
export class Api { 
    title: string = '<Application Name>'; 
    signInUrl: string = ''; 
    http: Http; 
    orgFriendlyName: KeyValue[]; 

    postData(): Promise<KeyValue[]> { 
     var headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 

     return this.http.post('url', JSON.stringify({}), { headers: headers }) 
      .then(function(res) { 
      .map(res => res.json()); 
      .subscribe((res: KeyValue[]) => this.orgFriendlyName = res); 
     }); 

    } 

    getComponentData(): Promise<IComponentData> { 
     return this.postData().then(() => { 
      return new Promise((resolve, reject) => { 
       resolve({ 
        title: this.title, 
        signInUrl: this.signInUrl, 
        orgFriendlyName: this.orgFriendlyName 
       }); 
      }); 
     }); 
    } 
} 

我應該如何從POST請求中獲取數據?

回答

1

我會使用的觀察到這樣的toPromise方法重構代碼:

postData(): Promise<KeyValue[]> { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    return this.http.post('url', JSON.stringify({}), { headers: headers }) 
     .map(res => res.json()) 
     .toPromise(); 
    }); 
} 

這樣,您就能夠在getComponentData方法中調用這個方法then上:

getComponentData(): Promise<IComponentData> { 
    return this.postData().then((data) => { 
    return { 
     title: data.title, 
     signInUrl: data.signInUrl, 
     orgFriendlyName: data.orgFriendlyName 
    }; 
    }); 
}