Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 财产';do';不存在于类型';认购';_Javascript_Angular_Rxjs_Observable_Subscribe - Fatal编程技术网

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”函数混淆:它仅在源可观察对象完成时被调用,而在可观察对象产生错误或被取消订阅时不会被调用