Javascript 财产';do';不存在于类型';认购';
关于如何将Javascript 财产';do';不存在于类型';认购';,javascript,angular,rxjs,observable,subscribe,Javascript,Angular,Rxjs,Observable,Subscribe,关于如何将.subscribe功能与.do功能结合使用,我有什么误解 这是我的观察序列: lookupSubscriber = (text$: Observable<string>) => text$.debounceTime(300) .distinctUntilChanged() .do(() => this.searching = true) .switchMap(term => { var data =
.subscribe
功能与.do
功能结合使用,我有什么误解
这是我的观察序列:
lookupSubscriber = (text$: Observable<string>) =>
text$.debounceTime(300)
.distinctUntilChanged()
.do(() => this.searching = true)
.switchMap(term => {
var data = this._callApi(this.lookupSubscriberAPI, term)
.do(() => {
this.searchFailed = false;
this.searching = false;
})
.catch(() => {
this.searchFailed = true;
this.searching = false;
return Observable.of([]);
})
return data;
})
.do(() => this.searching = false);
}
但是,当我尝试用subscribe
函数重写它时,如下所示:
_callApi = (url: string, term: string) => {
return this.dataService.get(url + term)
.subscribe(
response => { this._transformSubscriberInfo(response) },
error => error.text(),
() => {
if (Logging.isEnabled.light) {
console.log('%c API Call Complete', Logging.normal.orange);
}
))
}
。。。然后数据调用成功,但我收到错误:类型“Subscription”上不存在属性“do”。
基本上,我试图捕捉错误并在api调用后运行“始终”函数,如第二版本的
\u callApi
所示,\u callApi
的第一个版本似乎返回一个可观察的,而第二个版本返回一个订阅
对象。而Subscription
不会公开do
,这与错误消息所述完全相同
您可能希望尝试使用一个版本的do
,除了下一次
回调之外,它还接受错误
和完成
回调:
return this.dataService.get(url + term)
.map(response => this._transformSubscriberInfo(response))
.do(
response => { /* log response */ },
error => { /* log error */ },
() => { /* log completion */ }
);
值得一提的是,do
无法转换源流,它返回的可观测值包含与调用它的可观测值相同的值。这就是为什么我们需要行.map(response=>this.\u transformSubscriberInfo(response))
另外,不应将complete
回调与“始终”混淆函数:仅当源可观察对象完成时调用它,当可观察对象产生错误或取消订阅时不会调用它。第一个版本的\u callApi
似乎返回一个可观察对象
,而第二个版本返回一个订阅对象。而Subscription
不会公开do
,这与错误消息所述完全相同
您可能希望尝试使用一个版本的do
,除了下一次
回调之外,它还接受错误
和完成
回调:
return this.dataService.get(url + term)
.map(response => this._transformSubscriberInfo(response))
.do(
response => { /* log response */ },
error => { /* log error */ },
() => { /* log completion */ }
);
值得一提的是,do
无法转换源流,它返回的可观测值包含与调用它的可观测值相同的值。这就是为什么我们需要行.map(response=>this.\u transformSubscriberInfo(response))
另外,不应将complete
回调与“always”函数混淆:它仅在源可观察对象完成时被调用,而在可观察对象产生错误或被取消订阅时不会被调用