Angular2 订阅两次
Angular2 subscribe twice
我创建了一个 http 客户端,我在其中覆盖了 http post 方法:
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return this.handleResponse(response);
}
private handleResponse(responseO : Observable<Response>) : Observable<Response> {
responseO.do(response =>
{
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
});
return responseO;
}
然后在我的服务中我订阅了:
return this.http.post("/dummy", params).subscribe(response => callback(response.json()));
在我的 httpClient 中,如果我 return 响应而不是 handleResponse(response) 一切正常。我需要的是除了当前行为之外,我所有的请求都在 responseO.do(..) 中进行检查。
我也试过response.share();并订阅该对象,但这也不起作用。
有没有办法实现我正在寻找的东西?谢谢
确定您没有使用 do
拦截器订阅 Observable。
Return 带有 do
拦截器的 Observable:
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return this.handleResponse(response);
}
private handleResponse(responseO : Observable<Response>) {
return responseO.do(response => {
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
});
}
如果你想操作 observable 的流数据,而不是使用 do
,你可能应该使用 map
。这是更多 'reactive' 操作流的方式。
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return response.map(res => handleResponse(res));
}
private handleResponse(responseO : Response) : Response {
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
return responseO;
}
我还建议不要在 Angular 2 应用程序中使用 window.location.replace
,因为它会强制刷新页面,这意味着必须重新启动应用程序。如果您使用 Angular 路由器更改路线,则您在导航时无需等待应用加载。
我创建了一个 http 客户端,我在其中覆盖了 http post 方法:
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return this.handleResponse(response);
}
private handleResponse(responseO : Observable<Response>) : Observable<Response> {
responseO.do(response =>
{
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
});
return responseO;
}
然后在我的服务中我订阅了:
return this.http.post("/dummy", params).subscribe(response => callback(response.json()));
在我的 httpClient 中,如果我 return 响应而不是 handleResponse(response) 一切正常。我需要的是除了当前行为之外,我所有的请求都在 responseO.do(..) 中进行检查。
我也试过response.share();并订阅该对象,但这也不起作用。
有没有办法实现我正在寻找的东西?谢谢
确定您没有使用 do
拦截器订阅 Observable。
Return 带有 do
拦截器的 Observable:
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return this.handleResponse(response);
}
private handleResponse(responseO : Observable<Response>) {
return responseO.do(response => {
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
});
}
如果你想操作 observable 的流数据,而不是使用 do
,你可能应该使用 map
。这是更多 'reactive' 操作流的方式。
post(url, data):Observable<Response> {
let headers = new Headers();
this.createAuthorizationHeader(headers);
var response = this.http.post("\services" + url, data, {
headers: headers
});
return response.map(res => handleResponse(res));
}
private handleResponse(responseO : Response) : Response {
if (response.url.includes("LoginPage.html")) {
window.location.replace("../LoginPage.html");
}
return responseO;
}
我还建议不要在 Angular 2 应用程序中使用 window.location.replace
,因为它会强制刷新页面,这意味着必须重新启动应用程序。如果您使用 Angular 路由器更改路线,则您在导航时无需等待应用加载。