可观察<;无效>;Typescript中的使用模式
当一个异步服务没有返回值,但我想使用observeable时,我倾向于使用可观察<;无效>;Typescript中的使用模式,typescript,design-patterns,rxjs,observable,void,Typescript,Design Patterns,Rxjs,Observable,Void,当一个异步服务没有返回值,但我想使用observeable时,我倾向于使用observeable。但是我对这个布尔值没有任何意义,因为服务要么失败,要么成功,如果失败,我希望可观察对象处于错误状态。这只为观察到的布尔值留下“true”值 以下使用可观察到的对于这些情况是一种好的模式吗?或者使用Observable const asyncFuncWithoutResult=():可观察=>{ //伪造没有返回值的异步对象 const itWorked=true;//是否 如果(成功了){ 可观测的
observeable
。但是我对这个布尔值没有任何意义,因为服务要么失败,要么成功,如果失败,我希望可观察对象处于错误状态。这只为观察到的布尔值留下“true”值
以下使用可观察到的对于这些情况是一种好的模式吗?或者使用Observable
const asyncFuncWithoutResult=():可观察=>{
//伪造没有返回值的异步对象
const itWorked=true;//是否
如果(成功了){
可观测的返回值of();
}否则{
return Observable.throw(错误('It not work'));
}
}
//呼叫服务
asyncFuncWithoutResult()
.订阅(
未定义,//使用Observable.of()时不会发出任何信息
(err:any)=>console.error(err),//处理错误状态
()=>console.log('Success'),//处理成功状态
);
更准确地说,当您使用泛型类型void
定义主题时,有两种方法可以调用它的next()
方法,并且没有任何参数:
const subject = new Subject<void>();
subject.next();
实际上,next
的value
参数是可选的,因此如果您不指定它,它将发送未定义的,这意味着即使您有主题
,您仍然会收到next
通知:
asyncFuncWithoutResult().subscribe(alawaysUndefined => {
/* ... */
});
还请注意,您可以通过map
或mapTo
将任何可观察对象转换为
(当您想要合并多个可观察对象时,这是必要的):
source.mapTo(void 0)
...
我看不出有什么明显的问题。如果遇到需要发出任意值的情况,可以始终使用concat
和Observable.of
发出所需的任何值。例如,asyncFuncWithoutResult().concat(Observable.of(“success!”)
.Thx,这是一个非常有用的提示。感谢您提供的额外见解,非常有用。If subject.next();结果发出一个“未定义的”信号,与此Observable.of()类似的函数不返回发出一个“未定义的”信号的Observable,这有意义吗?我认为这是两个不同的东西。拥有一个不发出任何next
且只发送complete
通知的Observable.of()
通知(或Observable.empty
通知)的Observable是完全可以的。另一方面,让subject.next()
什么都不做是没有意义的,因为当您知道这个方法不会做任何事情时,调用它有什么意义?出于同样的原因,没有不发出任何next
、complete
或error
通知的可观察对象,因为为什么有人想使用它们。
asyncFuncWithoutResult().subscribe(alawaysUndefined => {
/* ... */
});
source.mapTo(void 0)
...