从 Unix 环境运行代码时,我遇到了这个非常烦人的错误。当我通过本地运行代码时,这工作正常ng serve
,但是当我将代码部署到我的服务器时,此错误会停止所有程序执行:
ERROR TypeError: this.http.get(...).catch is not a function
Google 结果表明我应该直接从 rxjs 位置导入 rxjs 命名空间,而不是通过 rxjs/Rx 捆绑包,但无论如何我都会收到此错误。其他结果指出我可能错过了导入 rxjs 运算符,但它们肯定包含在我的案例中。
我什至使用 DevTools 检查了包含的源映射,并且运算符包含在浏览器中。
谁能告诉我为什么我会收到此错误?我正在使用 rxjs:^5.5.2
这是我的代码。
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class MyService {
constructor(private http: HttpClient) {}
all(): Observable<any> {
return this.http.get<any>('url')
.catch(err => this.handleError(err));
}
handleError(error) {
return Observable.throw(error);
}
}
EDIT根据下面@Jota.Toledo的评论,我将提供使用此方法的代码:
this.myService.all().subscribe(
result => {
this.isLoading = false;
if (result) {
this.clients = result;
}
},
error => this.isLoading = false
);
像这样在 subscribe 中给出两个回调函数,是否与“在添加运算符之前的某处使用 catch 方法”相同?
In rxjs 5.5.2
你可以使用可出租运算符来解决这个问题,在这种情况下,catchError
。你必须从以下位置导入它operators
like: import { catchError } from 'rxjs/operators/catchError';
。一般来说,所有操作符都必须以这种方式导入,同样的事情observable
like observable/of
.
import { catchError } from 'rxjs/operators/catchError';
import { map } from 'rxjs/operators/map';
all(): Observable<any> {
return this.http.get<any>('url')
.pipe(
map(() => //do stuff),
catchError((error: Error) => {
//
})
)
}
阅读有关可出租运营商的更多信息here https://blog.angularindepth.com/rxjs-understanding-lettable-operators-fe74dda186d3?gi=2933859fdd18.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)