首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将redux-saga转换为redux-可观测的

将redux-saga转换为redux-可观测的
EN

Stack Overflow用户
提问于 2017-09-15 10:01:32
回答 1查看 557关注 0票数 2

我对反应性编程非常陌生,我想将下面的代码从redux-saga转换为redux-observable

这样做的目的是等待一些API调用,等待5s并调度另一个操作。

代码语言:javascript
复制
function* mySaga(action) {
  const response = yield call(someApiCall);
  yield call(delay, 5000);
  yield put({ type: 'ACTION' });
}

下面是我在redux--可观察到的--中如何做的:

代码语言:javascript
复制
action$
  .ofType('SOME_ACTION')
  .mergeMap(someApiCall)
  .delay(5000)
  .map(() => ({ type: 'ACTION' }))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-15 20:01:31

假设您在原始示例中省略了yield takeEvery('SOME_ACTION', mySaga)内容,您的翻译是准确的。

不过,我建议隔离您的可观察链;将所有要应用的内容放在someApiCall()之后,在mergeMap

代码语言:javascript
复制
action$
  .ofType('SOME_ACTION')
  .mergeMap(action =>
    someApiCall()
      .delay(5000)
      .map(() => ({ type: 'ACTION' }))
  )

尽管这在您的示例中没有什么不同,但如果您或某个团队成员稍后进来并尝试添加错误处理,关键是不要让错误气泡出现在mergeMap之外。

代码语言:javascript
复制
action$
  .ofType('SOME_ACTION')
  .mergeMap(action =>
    someApiCall()
      .delay(5000)
      .map(() => ({ type: 'ACTION' }))
      .catch(error => Observable.of({
        type: 'SOME_ACTION_FAILED',
        payload: error
      }))
  )

如果您将catch放置在可观察到的顶层,在mergeMap之后,错误将冒泡到顶级链,虽然您会捕捉到错误,但您的史诗将不再监听未来的操作。

如果不清楚原因,我建议学习更多关于可观察+操作员如何工作的知识--我保证没有那么可怕!这是一个伟大的视频,甚至触及“隔离您的观察链”,以捕捉错误在正确的点。https://youtu.be/3LKMwkuK0ZE?t=20m15s

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46236921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档