我们是否应该订阅一个 void 函数以及如何订阅

Should we subscribe to a void function and how?

本文关键字:函数 void 一个 何订阅 是否 我们      更新时间:2023-09-26

通过 promisses 它很容易成为我可以告诉函数 void 函数的返回类型是 Promise(我希望我是对的)。

我想对可观察量做同样的事情,所以它会像这样:

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. 如何使此代码工作?

谢谢。

如果您只需要 OnDone 消息,请使用 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();
  });
}

由于您不能真正使用void并且类型并不重要,因为没有人会尝试解释任何值,因此只需使用 any

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