如何在angular2中执行回调?

时间:2016-07-04 12:51:49

标签: http angular

我在angular2 服务中有以下代码:

this.returned: string;

parseResponse() : void {

 console.log("RESPONSE:",this.returned);

}

sendHttp(text: string): void {

 var to_send = JSON.stringify({"text": text});

 var headers = new Headers();
   headers.append('Content-Type', 'application/json');

 this.http
   .post('http://localhost:8080/', 
     to_send, {
       headers: headers
     })
   .map(res => {
       this.parseResponse()
   })
   .subscribe(
     function(response) { console.log("Success Response" + response)},
     function(error) { console.log("Error happened" + error)},
     function() { parseResponse(); }
   );

}

但遗憾的是,在我的nodejs服务器返回“testing”后,parseResponse()没有运行。但是,请求已正确接收。你能帮帮我吗?

编辑:

这是实际的代码。没有什么是console.logged。请求已发送。没有回调被执行。

parseResponse(res: Response) : void {

 console.log("RESPONSE:",res);

 }

 sendHttp(text: string): void {

 var to_send = "sending";

 var headers = new Headers();
   headers.append('Content-Type', 'application/json');

 this.http
   .post('http://localhost:8080/', 
     to_send, {
       headers: headers
     })
   .map((res) => res.json() )
   .subscribe(
     (response) => { console.log("Success Response" + response)},
     (error) => { console.log("Error happened" + error)},
     () => { this.parseResponse(res); }
   );

}

2 个答案:

答案 0 :(得分:0)

您应该使用箭头功能并在方法前添加this

.subscribe(
  (response) => { console.log("Success Response" + response)},
  (error) => { console.log("Error happened" + error)},
  () => { this.parseResponse(); }
);

这样你就可以使用lexical this(组件本身的实例)并引用/调用parseResponse方法。

有关详细信息,请参阅此文档:

修改

您需要注意,当您的HTTP请求(例如404)发生错误时,map运算符的回调不会被调用。这与订阅的完成回调相同。

答案 1 :(得分:0)

您可能希望将响应传递给您的方法:

.map(res => this.parseResponse(res))

或传递方法参考:

.map(this.parseResponse)

此外,您的parseResponse方法应返回“已解析”响应:

parseResponse(res: Response): any{
    let jsonRes = res.json();
    console.log("RESPONSE:", jsonRes);

    return jsonRes;
}