我在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); }
);
}
答案 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;
}