我的情况是我正在打开一个对话框,只有当对话框observable返回switchMap
值时才想true
到另一个observable,否则,显示错误并停止以下操作。
目前我有以下内容:
this.dilog.open(DialogComponent)
.afterClosed()
.takeUntil(this.end$)
.do(item => {
if (!item) {
this.error = 'Please accept the agreement to continue.'
this.isSubmitting = false;
}
})
.filter(item => !!item)
.switchMap(item => anotherObservable)
我想提高此代码的可读性。
答案 0 :(得分:1)
我假设您没有使用RxJS的5.5版本,这让您更轻松create your own operators。以下是在几个月的时间内浏览代码时希望提高可读性的功能:
// source: source observable
// onError: function to execute on error
// onSuccess: observable to switchMap to
function showErrorOrSwitchMap(source, onError, onSuccess) {
return source
.do(item => {
if (!item) {
onError();
}
})
.filter(item => !!item)
.switchMap(item => onSuccess)
}
// USAGE
showErrorOrSwitchMap(
this.dilog.open(DialogComponent)
.afterClosed()
.takeUntil(this.end$),
function() {
this.error = 'Please accept the agreement to continue.'
this.isSubmitting = false;
},
anotherObservable
); // You can continue the observable chain here if you want
这只是你的代码,在函数内移动。虽然它不会改变您的原始代码,但它(希望如此)使其在使用该函数时更具可读性。