RxJS和AngularJS HTTP - 我该如何实现?

Cle*_*ent 5 http observable rxjs angular

我正在编写一个小实用程序函数,它使用必要的身份验证标头包含对AngularJS http.get的调用:

get(endpoint: string): Observable {
    var headers = new Headers();
    this._appendAuthentificationHeaders( headers, this.user.credentials);

    return this.http.get(endpoint, { headers: headers })
            .map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)

这里的要点是,如果this.user为null,则该方法将崩溃.所以我有三个选择:

  1. 返回null并检查每次调用的返回值...
  2. 抛出一个例外
  3. 找到一种方法来返回一个直接触发错误处理程序的RxJS Observable对象.

我想实现第三种方法,因为它允许我统一这个方法的行为:无论发生什么,它总是返回一个observable.

  • 你知道怎么做吗?
  • 我是否必须创建一个新的Observable并将这两个合并?
  • 我能做什么?

Thi*_*ier 3

如果usernull,您可以简单地返回一个触发错误的原始可观察值:

if (this.user == null) {
  return Observable.create((observer) => {
    observer.error('User is null');
  });
}

(...)
Run Code Online (Sandbox Code Playgroud)

或利用运算符throw

if (this.user == null) {
  return Observable.throw('User is null');
}

(...)
Run Code Online (Sandbox Code Playgroud)

这样subscribe就会调用该方法的第二个方法:

observable.subscribe(
  (data) => {
    (...)
  },
  (err) => {
    // Will be called in this case
  }
);
Run Code Online (Sandbox Code Playgroud)