javascript - 将 http 调用包装到共享函数中
问题描述
我有一个休息提供者服务,其中包含我所有的 http 调用。但是,每个函数都重用了很多相同的 http 代码,似乎我应该将它包装到一个共享函数中,以防我想更改其中的任何内容
如您所见,这两个功能几乎完全相同,只是 url 发生了变化。如何重构此代码以不在我的所有函数中重用相同的代码?
getStepMenu(_params): Observable<StepMenu> {
// Add params
let params = new HttpParams();
for (let key in _params) {
if (_params.hasOwnProperty(key)) {
params = params.set(key, _params[key]);
}
}
return this.http
.get<StepMenu>(this.env.API_URL + 'api/step_menu', { headers: this.headers, params: params })
.pipe(
retry(this.retries),
catchError(this.handleError)
)
}
getStepInfo(_params): Observable<StepInfo> {
// Add params
let params = new HttpParams();
for (let key in _params) {
if (_params.hasOwnProperty(key)) {
params = params.set(key, _params[key]);
}
}
return this.http
.get<StepInfo>(this.env.API_URL + 'api/step_info', { headers: this.headers, params: params })
.pipe(
retry(this.retries),
catchError(this.handleError)
)
}
解决方案
我看到的唯一区别是 api 路径,您可以将其作为方法参数传递,如下所示:
getStepMenu(_params): Observable<StepInfo> {
return this.callStepApi('api/step_menu', _params)
}
getStepInfo(_params): Observable<StepInfo> {
return this.callStepApi('api/step_info', _params);
}
callStepApi(path, _params): Observable<StepInfo> {
// Add params
let params = new HttpParams();
let url = this.env.API_URL + path;
for (let key in _params) {
if (_params.hasOwnProperty(key)) {
params = params.set(key, _params[key]);
}
}
return this.http
.get<StepInfo>(url, { headers: this.headers, params: params })
.pipe(
retry(this.retries),
catchError(this.handleError)
)
}
您可以通过订阅返回的 obserables 以相同的方式调用它:
getStepInfo(params).subscribe();
getStepMenu(params).subscribe();
推荐阅读
- python - 如何将 Plotly 升级到最新版本?
- python - 无法使用导出导出 Yolov5 模型
- ansible - Ansible Inventory:如何从不在某些其他组中的主机构建组
- javascript - Oracle APEX 警告消息
- r - 如何在函数中使用包含多个变量的选择?
- reactjs - 类型对象上不存在属性“过滤器”
- bootstrap-5 - 未捕获的类型错误:z.fn.dropdown 未定义
- macos - 您应该如何在 Metal 中正确编码大量 blit 或缩放命令?
- javascript - 如何覆盖html表中的数据并将此数据导出到现有的excel文件
- arrays - 对一维数组的元素求和