当异步服务没有返回值但我想使用 Observables 时我倾向于使用 Observable<boolean>
.但是我对这个 bool 值没有意义,因为服务要么失败要么成功,如果失败我希望 Observable 处于错误状态。这只为观察到的 bool 值留下“真”值。
下面是用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
);
最佳答案
更准确地说,当您定义一个具有通用类型的 Subject 时 void
您可以通过两种方式调用它的 next()
方法并且没有任何参数:
const subject = new Subject<void>();
subject.next();
...或使用 void 0
:
subject.next(void 0);
事实上,value
next
的参数是可选的,所以如果你不指定它,它会发送 undefined
这意味着即使你有 Subject<void>
您仍然会收到 next
通知:
asyncFuncWithoutResult().subscribe(alawaysUndefined => {
/* ... */
});
另请注意,您可以将任何 Observable 转换为 <void>
(当你想合并多个 Observables 时这是必要的)map
:
source.pipe(map(() => void 0))
...
关于typescript - Typescript 中的 Observable<void> 使用模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378457/