RXJS和打字稿:有条件地执行服务器和客户端代码的工作

问题描述



我的要求是提供一个使用各种条件来确定是否可以编辑对象的功能
这些条件可以同时出现在服务器端和客户端上。
其中某些条件应中止进一步验证的执行并返回值。

我将尝试使用伪代码使该过程易于理解。
也许已经有一种执行此类任务的模式。

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
    }
  })
}
```