2017-06-17 38 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)) 
     ) 
    }) 

我想只返回

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

如果action.payload.products.length大于0,否则,显示警报。

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,并返回一个可观察与showAlertDialog如果action.payload.products.length < 1

+2

错字?你没有测试'长度'。它不应该是'action.payload.products.length> 0'吗? – cartant

+0

@cartant你说得对。现在改变了。谢谢 – BeniaminoBaggins

回答

2

mergeMap内的正常条件如何?

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目前是多余的,因为一个Observable.of不会抛出错误:

.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)')可以抛出一个异常,你可以添加处理但不应该 - 这将是baddd。所以这个史诗般的,不应该产生任何错误,所以不需要错误处理。 – jayphelps

+0

有道理!干杯 – BeniaminoBaggins

相关问题