【问题标题】:combine rxjs takeUntil, catchError in redux-observable AJAX epic在 redux-observable AJAX 史诗中结合 rxjs takeUntil、catchError
【发布时间】:2018-09-15 21:10:46
【问题描述】:

我寻求“取消”(takeUntil) 在以下 redux-observable 史诗中的 AJAX 调用,同时保留 catchError 效果。

const someEpic = action$ =>
  action$.pipe(
    ofType(REQUEST_MAPPED_ESTABLISHMENTS),
    map( action => ( // transform data to url )),
    mergeMap( url  =>
      ajax({ url }).pipe(
        mergeMap( establishments => {
          const { error, data } = establishments.body
          if (error) throw 'some error';
          return of(actions.receiveMappedEstablishments(data))
        }),
        catchError(error =>
          (of(actions.requestMappedEstablishmentsFailure(error)))
        ),
      )
    ),
  )

如何重组以上摘录以包含takeUntil,例如,以下内容?

takeUntil(action$.ofType(UI_HAS_CHANGED_SO_NEW_DATA_NOW_REQUIRED)) 

到目前为止,在我的尝试中,我只成功地完全取消了someEpic,例如将takeUntil插入action$.pipe

【问题讨论】:

  • 请解释一下 nwse 是什么。
  • takeUntil ... 什么?另一个动作?
  • 感谢您的关注:请查看请求的更改。

标签: rxjs redux-observable


【解决方案1】:
const someEpic = action$ =>
  action$.pipe(
    ofType(REQUEST_MAPPED_ESTABLISHMENTS),
    map( action => ( // transform data to url )),
    mergeMap( url  =>
      ajax({ url }).pipe(
        mergeMap( establishments => {
          const { error, data } = establishments.body
          if (error) throw 'some error';
          return of(actions.receiveMappedEstablishments(data))
        }),
        catchError(error =>
          (of(actions.requestMappedEstablishmentsFailure(error))),
        takeUntil(action$.ofType(UI_HAS_CHANGED_SO_NEW_DATA_NOW_REQUIRED)) 
        ),
      )
    ),
  )

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 2021-01-11
    • 2019-02-24
    • 2018-01-14
    • 2021-11-13
    • 2019-01-23
    • 2017-04-22
    • 2019-09-27
    相关资源
    最近更新 更多