Http 如何在angular2中执行回调?
我在angular2服务中有以下代码:Http 如何在angular2中执行回调?,http,angular,Http,Angular,我在angular2服务中有以下代码: this.returned:string; parseResponse():void{ log(“响应:”,this.returned); } sendHttp(文本:字符串):无效{ var to_send=JSON.stringify({“text”:text}); var headers=新的headers(); headers.append('Content-Type','application/json'); 这是http .post('http
this.returned:string;
parseResponse():void{
log(“响应:”,this.returned);
}
sendHttp(文本:字符串):无效{
var to_send=JSON.stringify({“text”:text});
var headers=新的headers();
headers.append('Content-Type','application/json');
这是http
.post('http://localhost:8080/',
发送{
标题:标题
})
.map(res=>{
this.parseResponse()
})
.订阅(
函数(响应){console.log(“成功响应”+响应)},
函数(错误){console.log(“发生错误”+错误)},
函数(){parseResponse();}
);
}
但不幸的是,在nodejs服务器返回“testing”后,parseResponse()
没有运行。但是,请求被正确接收。你能帮我吗
编辑:
这是实际代码。未记录任何内容。请求已发送。不执行回调
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); }
);
}
您应该使用箭头函数,并在方法前面加上
this
:
.subscribe(
(response) => { console.log("Success Response" + response)},
(error) => { console.log("Error happened" + error)},
() => { this.parseResponse(); }
);
通过这种方式,您将能够使用词法This(组件本身的实例)并引用/调用parseResponse
方法
有关更多详细信息,请参阅此文档:
您需要知道,当HTTP请求中发生错误时(例如404),不会调用
map
操作符的回调。这与订阅时的完成回调相同。您可能希望将响应传递给您的方法:
.map(res=>this.parseResponse(res))
或通过方法引用:
.map(此.parseResponse)
您的parseResponse
方法还应返回“已解析”响应:
parseResponse(res:Response):任意{
让jsonRes=res.json();
log(“响应:”,jsonRes);
返回jsonRes;
}
您的意思是在第三次回调中没有调用该方法?该方法是否在map
回调中调用?否。它不会在任何地方调用。您需要注意,当HTTP请求(例如404)中发生错误时,不会调用map
操作符的回调。您的请求成功了吗?为什么parseResponse必须返回响应?为什么我不能在那里处理所有的事情呢?你不必按照sé返回响应,但是你想在订阅中得到的最后一个对象。在我建议的示例中,假设API返回JSON,那么您将返回反序列化的JSON字符串。这就是文档所说的:映射操作符将您选择的函数应用于源可观测项发出的每个项,并返回一个可观测项,该可观测项发出这些函数应用程序的结果。
但是订阅和映射之间的区别是什么?我理解angular 2中的函数,但不理解它们的上下文。我应该在subscribe中放置什么?在map
方法中,您可以执行反序列化和所有操作(通常只是res.json()
),在subscribe
方法中,您实际上是在检索数据流。从技术上讲,您已经可以将数据存储在map
方法中的局部变量中,但无论如何您都必须调用subscribe
来启动HTTP请求。在onDone
回调中没有响应。但除此之外,你是否已经尝试过邮递员或小提琴手的请求,只是为了检查它是否真的返回了什么?