使用http调用和句柄响应在Angular 4中创建方法

时间:2018-04-26 13:03:48

标签: angular es6-promise

我有一个具有请求功能的提供者类。它工作正常:

sendRequest(requestBody:any,URL:string){
    let headers = new Headers();
    headers.append("Accept", 'application/json');
    headers.append('Content-Type', 'application/json' );
    let options = new RequestOptions({ headers: headers });

    let body=requestBody;
    body.key=this.key;

    this.http.post(this.url+URL, body, options)
      .subscribe(data => {
        let json=JSON.parse(data['_body']);

          let toast=this.toast.create({
            message:json.response,
            duration:3000,
            position:'top'
          });
          toast.present();
          return json;
      }, error => {
        console.log(error);// Error getting the data
      });
  }

我想调用此方法并希望在另一个类中使用json响应。我试着打电话给诺言,但没有成功。任何帮助都将受到高度赞赏。

修改 我想要执行toast以及我尝试返回this.http.post ...它返回一个订阅对象。如何从中获取json数据?

**编辑#2 ** 我使用定义上的map成功返回数据,并在呼叫端订阅。

return this.http.post(this.url+URL, body, options)
      .map((data) => {
        let json=JSON.parse(data['_body']);

          let toast=this.toast.create({
            message:json.response,
            duration:3000,
            position:'top'
          });
          toast.present();
          return json;
      }

并使用

进行调用
this.request.sendRequest(requestBody,'api/login').subscribe((data)=>{
      console.log(data);
    });

吐司也有效。

解决

1 个答案:

答案 0 :(得分:0)

如果您的目标是追加标题并显示toatser,请考虑使用新interceptor中的Http Client module

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

  let headers = new Headers();
  headers.append("Accept", 'application/json');
  headers.append('Content-Type', 'application/json' );
  let options = new RequestOptions({ headers: headers });

  const clone = req.clone({ setHeaders: headers });

  return next
    .handle(clone || req)
    .map(response => {
      this.toast.create(...);
      return response;
    });
}