Observable Typescript中的使用模式
当异步服务没有返回值但我想使用Observables时,我倾向于使用Observable<boolean>
。但我对这个布尔值没有意义,因为服务失败或成功,如果失败,我希望Observable处于错误状态。这只留下观察到的布尔值的“真”值。Observable <void> Typescript中的使用模式
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()
方法,这是不带任何参数:
const subject = new Subject<void>();
subject.next();
事实上,value
参数next
是可选的,所以如果你不指定它,它会发送undefined
这意味着,即使你有Subject<void>
您仍然会收到next
个通知:
asyncFuncWithoutResult().subscribe(alawaysUndefined => {
/* ... */
});
另外请注意,你可以将任何可观察到<void>
(当你要合并多个观测量,这是必要的)通过map
或mapTo
:
source.mapTo(void 0)
...
感谢您的额外见解,非常有帮助。如果subject.next();导致发送'undefined'是否有意义,类似于这个Observable.of()不会返回带有'undefined'的Observable? – Halt
我认为这是两回事。如Observable.of()'(或'Observable.empty')一样,Observable不会发出任何'next'并只发送'complete'通知,这是完全正确的。另一方面,让'subject.next()'不做任何事情是没有意义的,因为当你知道它不会做任何事情时调用这个方法的意义何在?出于同样的原因,没有Observable不会发出任何'next','complete'或'error'通知,因为为什么有人想要使用它们。 – martin
我看不到任何明显的问题。如果遇到需要发出任意值的情况,则始终可以使用'concat'和'Observable.of'来发出所需的值。例如。 'asyncFuncWithoutResult()。CONCAT(Observable.of( “成功了!”))'。 – cartant
Thx,这是一个非常有用的提示。 – Halt