2017-10-31 18 views
0

私の状況は私がダイアログをオープンしようとしていて、ダイアログオブザーバブルがtrueの値を返す場合にのみswitchMapを別のオブザーバブルにしたい場合は、エラーを表示して次のアクションを停止します。Observableにdo if演算子がありますか?

現在、私は次のようにあります

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

私が見る限り、観察可能なチェーンはあなたがしたいことをします。何か不足していますか? –

+0

私はacheiveを希望することはあり のようなもの 'this.dialog.opne(DialogComponent).IF(#onTrue()=> SETERROR、#onFalse()=> switchMap)' –

+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 

これはちょうどあなたのコードでは、関数内に移動。元のコードは変更されませんが、関数が使用されている場所では(うまくいけば)読みやすくなります。

関連する問題