非同期サービスに戻り値がありませんが、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
);
より正確には、サブジェクトをジェネリック型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)
...