2017-06-17 13 views
0

ある場合、私は、この叙事詩を持っている:リターン異なる観察可能なペイロード長は、<1

export const fetchProductsFulfilledEpic = action$ => 
    action$.ofType(FETCH_PRODUCTS_FULFILLED) 
    .mergeMap(action => { 
     return Observable.of(
     updateSearchResults(action.payload), 
     toggleMenu(), 
     updateRegion(action.payload) 
    ).catch(error => Observable.of(
     fetchProductsRejected(error)) 
     ) 
    }) 

私はaction.payload.products.lengthがそうでなければ、警告を表示し、0よりも大きい場合にのみ

updateSearchResults(action.payload), 
toggleMenu(), 
updateRegion(action.payload) 

を返すようにしたいと思います。

Attmept:

export const fetchProductsFulfilledEpic = action$ => 
    action$.ofType(FETCH_PRODUCTS_FULFILLED) 
    .mergeMap(action => { 
     Observable.if(() => action.payload.products.length > 0, 
     Observable.of(
      updateSearchResults(action.payload), 
      toggleMenu(), 
      updateRegion(action.payload) 
     ), Observable.of(...enter alert observable here...) 
    ).catch(error => Observable.of(
     fetchProductsRejected(error)) 
     ) 
    }) 

取得エラー:

You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

は、どのように私は上記のObservable.of返し、showAlertDialogaction.payload.products.length < 1場合で、観察を返します。

+2

タイプミス:Observable.ofはエラーをスローすることはありませんので、サイドポイントとして

export const fetchProductsFulfilledEpic = action$ => action$.ofType(FETCH_PRODUCTS_FULFILLED) .mergeMap(action => { if (action.payload.products.length > 0) { return Observable.of( updateSearchResults(action.payload), toggleMenu(), updateRegion(action.payload) ); } else { return Observable.of( showAlertDialog() ); } }) 

、あなたのcatchは現在、余分なのですか?あなたは 'length'をテストしていません。 'action.payload.products.length> 0'ではありませんか? – cartant

+0

@cartantあなたが正しいです。今すぐ変更しました。おかげで – BeniaminoBaggins

答えて

2

mergeMapの内部の通常の状態はどうですか?

.mergeMap(action => { 
    return Observable.of(
    updateSearchResults(action.payload), 
    toggleMenu(), 
    updateRegion(action.payload) 
    // this is catching errors on the above Observable but 
    // this Observable will never ever throw errors 
).catch(error => Observable.of(
    fetchProductsRejected(error) 
)) 
}) 
+0

ありがとう、あなたのソリューションは動作します:)本当にこの叙事詩でエラーをキャッチする場所ではないようですか? – BeniaminoBaggins

+1

@BeniaminoBagginsアクションクリエイターの一人(例えば 'updateSearchResults(action.payload) ')が例外をスローする可能性がある場合、処理を追加することはできますが、それは悪いことではありません。だから、この壮大な、そのままのエラーは発生しないので、エラー処理は必要ありません。 – jayphelps

+0

意味があります!乾杯 – BeniaminoBaggins

関連する問題