当我在 angular7 中将 http 升级到 httpClient 时,rxjs 地图出现错误
rxjs map is giving an error when i upgrade http to httpClient in angular7
我有一个服务,其中我有这样的登录功能
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.map(res => res.json())
.subscribe(response => {
resolve(response);
});
});
}
并在这样的实用程序中具有 generateApiRequest
功能
generateApiRequest(request, isTokened = false) {
var res;
let response;
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (isTokened) {
request.headers.append('Token', this.localCache.getToken());
}
switch (request.type) {
case Constants.REQUEST_TYPE.GET:
response = this.get(request);
break;
case Constants.REQUEST_TYPE.POST:
response = this.post(request);
break;
case Constants.REQUEST_TYPE.PUT:
response = this.put(request);
break;
case Constants.REQUEST_TYPE.DELETE:
response = this.delete(request);
break;
}
return response;
}
当我将旧的 http
升级到新的 HttpClient
之后,我必须更改管道函数中的映射,所以我这样做了
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.pipe(map(res => res.json()))
.subscribe(response => {
resolve(response);
});
});
}
但是编译器在这一行报错.pipe(map(res => res.json()))
我该如何解决?
是的,那是因为默认情况下新的 http 客户端会隐式调用 res.json(),您不需要自己手动调用。只需删除 .json() 调用,因此您根本不需要在您的情况下使用 'map'。
因为 Angular Http 客户端已经映射来自 API 的默认响应是 JSON。
您可以简单地删除地图
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.subscribe(response => {
resolve(response);
});
});
}
我有一个服务,其中我有这样的登录功能
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.map(res => res.json())
.subscribe(response => {
resolve(response);
});
});
}
并在这样的实用程序中具有 generateApiRequest
功能
generateApiRequest(request, isTokened = false) {
var res;
let response;
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (isTokened) {
request.headers.append('Token', this.localCache.getToken());
}
switch (request.type) {
case Constants.REQUEST_TYPE.GET:
response = this.get(request);
break;
case Constants.REQUEST_TYPE.POST:
response = this.post(request);
break;
case Constants.REQUEST_TYPE.PUT:
response = this.put(request);
break;
case Constants.REQUEST_TYPE.DELETE:
response = this.delete(request);
break;
}
return response;
}
当我将旧的 http
升级到新的 HttpClient
之后,我必须更改管道函数中的映射,所以我这样做了
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.pipe(map(res => res.json()))
.subscribe(response => {
resolve(response);
});
});
}
但是编译器在这一行报错.pipe(map(res => res.json()))
我该如何解决?
是的,那是因为默认情况下新的 http 客户端会隐式调用 res.json(),您不需要自己手动调用。只需删除 .json() 调用,因此您根本不需要在您的情况下使用 'map'。
因为 Angular Http 客户端已经映射来自 API 的默认响应是 JSON。
您可以简单地删除地图
public userLogin(body) {
return new Promise((resolve, reject) => {
this.apiService
.generateApiRequest({
route: Constants.API_ROUTES.USER_LOGIN.route,
type: Constants.API_ROUTES.USER_LOGIN.type,
body: body
})
.subscribe(response => {
resolve(response);
});
});
}