web-dev-qa-db-ja.com

Typescriptの観察可能な<void>使用パターン

非同期サービスに戻り値がありませんが、Observablesを使用したい場合、Observable<boolean>を使用する傾向があります。しかし、サービスが失敗または成功するため、このブール値には意味がありません。サービスが失敗した場合、Observableをエラー状態にする必要があります。これにより、観測されたブール値には「真」の値のみが残ります。

次のObservable<void>の使用は、これらの状況に適したパターンですか?または、Observable<void>の使用に予見可能な問題がありますか

const asyncFuncWithoutResult = (): Observable<void> => {
  // fake something async that has no return value

  const itWorked = true; // or not
  if (itWorked) {
    return Observable.of();
  } else {
    return Observable.throw(Error('It did not work'));
  }
}

// call the service
asyncFuncWithoutResult()
  .subscribe(
    undefined, // nothing will be emitted when using Observable.of()
    (err: any) => console.error(err), // handle error state
    () => console.log('Success'),     // handle success state
  );
11
Halt

より正確には、サブジェクトをジェネリック型voidで定義する場合、そのnext()メソッドを呼び出す方法は2つあり、引数はありません。

const subject = new Subject<void>();
subject.next();

...またはvoid 0

subject.next(void 0);

実際、valueへのnext引数はオプションであるため、指定しない場合はundefinedが送信されます。つまり、Subject<void>引き続きnext通知を受け取ります

asyncFuncWithoutResult().subscribe(alawaysUndefined => {
  /* ... */
});

また、任意のObservableを<void>(これは、複数のObservableをマージする場合に必要です)mapまたはmapToによる:

source.mapTo(void 0)
   ...
11
martin