2016-10-18 151 views
4

我使用角2中的HTTP请求。我希望当我得到HTTP响应时,然后调用下一个进程。等待角2中的Http响应

例:形式选择选项值从HTTP GET请求。我来要形成页面加载,直到我获得选择选项的响应。

get函数

getSelectOptionValue(): any { 
     let area_list_url = '/select_option_list/'; 

     this.urlGet(area_list_url).subscribe(
     (response) => { 
      let data = response.text() ? response.json() : [{}]; 
      if (data) { 
      Constant.areaList = data; 
      } 
     } 
    ); 
    } 
    return JSON.stringify(Constant.areaList); 
    } 

GET功能

urlGet(url: string) { 

    return this._http.get(Constant.hostUrl + url, {headers: GlobalUtils.head}) 
     .map((res)=> { 
     if (res.status === 200) { 
      console.log(res); 
      return res; 
     } else if (res.status = 201) { 
      return res; 
     } 
     }).catch((error)=> { 
     console.log(error); 

     if (error.status === 400) { 
      return Observable.throw(new Error(error.status)); 
     } else if (error.status === 401) { 
      return Observable.throw(new Error(error.status)); 
     } else if (error.status === 403) { 
      return Observable.throw(new Error(error.status)); 
     } else if (error.status === 404) { 
      return Observable.throw(new Error(error.status)); 
     } else if (error.status === 420) { 
      return Observable.throw(new Error(error.status)); 
     } else { 
      return Observable.throw(new Error(error.status)); 
     } 
     }); 
    } 
+1

只是调用函数/ *下一道工序*从'订阅'? – smnbbrv

回答

9

你不能让代码等待异步调用返回。

你可以做些什么来链接异步调用,以便在异步调用返回时执行一些代码。

如果您使用map()而不是subscribe(),则可以返回创建的Observable供调用方订阅。如果调用subscribe()返回值将是一个Subscription但通常不是呼叫者非常有用:

getSelectOptionValue():any { 
     let area_list_url = '/select_option_list/'; 

     return this.urlGet(area_list_url).map(/// <<<=== use `map` here 
     (response) => { 
      let data = response.text() ? response.json() : [{}]; 
      if (data) { 
      Constant.areaList = data; 
      } 
      return JSON.stringify(Constant.areaList); 
     } 
    ); 
    } 
} 

,然后使用它像

this.getSelectOptionValue().subscribe(data => {/* your code that works with received data here */ }); 
+0

我正好在** get function **中使用map,并在getSelectOptionValue() – user6751153

+0

中订阅并通过我的答案**错误:当我再次使用getSelectOptionValue()中的map时,无法读取undefined **的属性'subscribe'。 – user6751153

+0

对不起,我没有提及'return'我添加了将'subscribe'改为'map'的地方。如果你在那里添加'return',它应该可以工作。 –