我们应该订阅无效功能吗?

时间:2016-07-15 16:33:45

标签: javascript angular rxjs rxjs5

随着promisses的简单,我可以告诉函数void函数的返回类型是Promise(我希望我对它有用)。

我想对Observables做同样的事情,所以它会像:

import {Observable, Subject} from "rxjs/Rx"

...
private personArray:Person[] = PERSONS; ///some persons in other file.
...

///This fucntion remove one person from my service.

public remove(id:number):Observable<void> {
    this.personArray = this.personArray.filter(person1=>person1.id !== id);
    return Observable.from(); ???
  }
  1. 订阅者不知道第一行是否抛出错误。我确信有更好的方法可以做到这一点,我会很高兴看到任何其他的骚扰。
  2. 如何使此代码正常工作?
  3. 感谢。

2 个答案:

答案 0 :(得分:1)

如果您只想要OnCompleted消息,请使用Observable.empty()。如果发生错误,您可以使用Observable.throw(...)

public remove(id:number):Observable<void> {
  try {
    this.personArray = this.personArray.filter(person1=>person1.id !== id);
    return Observable.empty();
  } catch (e) {
    return Observable.throw(e);
  }
}

或者,您可以使用.defer()。如果您的函数抛出异常,则会(自动)抛出OnError:

public remove(id:number):Observable<void> {
  return Observable.defer(() => {
    this.personArray = this.personArray.filter(person1=>person1.id !== id);
    return Observable.empty();
  });
}

答案 1 :(得分:0)

由于您无法真正使用void并且该类型无关紧要,因为没有人会尝试解释任何值,只需使用any

public remove(id:number):Observable<any> {
    this.personArray = this.personArray.filter(person1=>person1.id !== id);
    return Observable.empty<any>();
}