angular - rxjs 主题 switchmap http 错误

标签 angular error-handling rxjs ionic2

当一个新的 http. get() 请求被触发。

问题是当我处理 http 错误(如超时)时,在 html 中调用的方法 _postMPCHC.next(...) 不再起作用... 我是否需要在出错时重新创建订阅?怎么样?

import {Component} from '@angular/core';
import {NavController, NavParams, Toast} from 'ionic-angular';
import {Http, URLSearchParams} from '@angular/http';
import {AppSettings} from '../../appSettings';
import {Subject} from 'rxjs/Subject';


@Component({
  templateUrl: 'build/pages/video/video.html'
})
export class VideoPage {
  _postMPCHC: any= new Subject();

  constructor(private http: Http, private nav: NavController) {
    this.defineHttp();
  }

  defineHttp() {

    var sub = this._postMPCHC.switchMap((x: string) => {
      let params: URLSearchParams = new URLSearchParams();
      params.set('token', AppSettings.API_TOKEN);
      params.set('prog', 'mhz');
      params.set('prog', 'mpchc');
      params.set('action', x);

      return this.http.get(AppSettings.API_ENDPOINT, { search: params })

    }).timeout(5000, new Error('timeout exceeded')).subscribe(x => { },
      error => {
        let toast = Toast.create({
          message: 'Server response: ' + <any>error,
          duration: 3000,
          position: 'middle'
        });
        this.nav.present(toast);
      })

  }
}

最佳答案

问题是当流出现错误时——它结束了。如果你想处理 http 错误但保持主流事件,你应该在 http 流级别处理错误。 请参阅本文 - Error handling. What to do when error kills stream .

因此,在您的情况下,您可以通过添加 .pipe(catchError(.. .)) - 它将使您的 mai 流保持事件状态并捕获 http 错误

关于angular - rxjs 主题 switchmap http 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682895/

相关文章:

angular - 在单个页面中更改 ionic 标签的字体大小 - Ionic

error-handling - 返回结构或错误的惯用方式是什么?

c# - 有关在C#中执行while循环的问题

javascript - 在 Angular 应用程序中对 Observable 的 POST 请求使用 switchMap

RxJS 6 扩展不是无限的?

angular - 在 ngconf2015demo 上执行 tsc 时出错 - 缺少 tsd.d.ts

Angular2 在表达式中加入字符串

angular - 我无法将我的类(class)设置为 Ionic2 上的 promise

python - TypeError : __init__() missing 4 required positional arguments:

rxjs - 无需 RXJS 即可观察到兼容性