我有一個需求,我需要對Web API發出http post方法請求,即保存用戶輸入的一些數據。 Web API將作爲結果返回一些值,並且此結果將用於某些UI邏輯。如何從Angular2的http post方法獲取返回值?
我嘗試以同步方式製作http文章,但它無法正常工作。
Angular2組件調用該服務保存數據: -
public SaveCubeReport(userName: any, cubeReport: CubeReportViewModel, APIServiceURL: any)
{
var result = this.SaveData(userName, cubeReport, APIServiceURL).subscribe(
data => {
console.log(data);
});
console.log(result);
}
HTTP POST方法調用如下: - 其中angular2模態彈出被調用
SaveData(userName: any, cubeReport: CubeReportViewModel, APIServiceURL: any)
{
var temp = this._http.post(APIServiceURL, JSON.stringify(cubeReport), { headers: ContentHeaders })
.map((res: Response) => res.json())
.do(() => {
console.log('request finished');
});
return res;
}
父組件。
var dialog = this.modal.open(SaveCubeReport, overlayConfigFactory(
{
ReportName: this.ReportItem.rpt_name,
ReportDescription: this.ReportItem.rpt_description,
Application: this.ReportItem.application_name,
Owner: this.ReportItem.owner,
CubeId: this.CubeId,
ReportId: this.ReportItem.rpt_id,
ReportJson: JSON.stringify(this.getState())
}, BSModalContext));
dialog
.then((d) => d.result)
.then((r) => {
// success
console.log("Dialog ended with success: ", r);
this.RefreshReportListDropdown(r);
}, (error) => {
// failure
console.log("Dialog ended with failure: ", error);
});
從Service調用時
RefreshReportListDropdown(savedReportName: any)
{
this._ClientAPIService.GetCubeReportsListByCubeWithEmptyRecord(this._SessionService.LoggedInUser, this._SessionService.SelectedApplication, this.cubeName, this._SessionService.ClientAPIServiceURL)
.subscribe(
(res) => {
this.cubeReportList = res; //This result should contain all records including the recently saved data from the popup
....
}
);
}
我所有的要求都做出了非同步的要求,即它不會迫不及待地想返回值的功能。 這裏有什麼錯誤?
結果是訂閱,沒有返回值。請詳細閱讀一下異步和RxJS,否則你會很困難。 – jonrsharpe
[Angular 2 - 直接從Observable返回數據]的可能副本(https://stackoverflow.com/questions/37867020/angular-2-return-data-directly-from-an-observable) – jonrsharpe