问题描述
我的要求是提供一个使用各种条件来确定是否可以编辑对象的功能。
这些条件可以同时出现在服务器端和客户端上。
其中某些条件应中止进一步验证的执行并返回值。
我将尝试使用伪代码使该过程易于理解。
也许已经有一种执行此类任务的模式。
isEditable(): Observable<boolean> {
return serverSideCondition.pipe(
switchMap(editable => {
if (editable)
{
return clientSideCondition;
}
return of(false); // Should abort furhter conditions ...
}),switchMap(editable => {
if (editable)
{
return clientSideAskTheUser;
}
return of(false); // Should abort furhter conditions ...
})
);
}
谢谢
解决方法
如果您不希望通过所有运算符传递false
值,则可能引发错误并在以后捕获它。
isEditable(): Observable<boolean> {
return serverSideCondition.pipe(
throwIfFalsy(),switchMap(editable => clientSideCondition.pipe(throwIfFalsy())),switchMap(editable => clientSideAskTheUser.pipe(throwIfFalsy())),// other operators ...
catchError(error => of(error))
);
}
throwIfFalsy() {
return tap(value => {
if (!value) {
throw value
}
})
}
```