gpt4 book ai didi

javascript - 使用 Redux-Observable 调度延迟的第二个操作,同时保留第一个操作

转载 作者:行者123 更新时间:2023-12-01 03:59:22 26 4
gpt4 key购买 nike

我正在尝试创建一个史诗,它将执行一个操作,然后分派(dispatch)两个不同的操作,第二个操作延迟两秒。经过多次尝试,这是我能做的最好的事情:

const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000))

不幸的是,似乎:

Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000)

在加载我的应用程序后立即运行(而不是在事件来自父流时)。我注意到这一点是因为在加载我的应用程序后两秒,reducer 收到了 FETCH_SUCCESS 操作。我什至附上了 console.log 来确认这一点:

const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' })
.do(() => console.log('this has begun'))
.delay(2000)
)

“这已经开始”在应用程序启动时记录到控制台。

我怀疑这与 Redux-Observable 自动为你订阅的方式有关。

我想要的行为是:

  1. 点击一个按钮来调度 FETCH_WILL_SUCCEED 事件。
  2. 立即调度 FETCH_REQUEST 事件。
  3. 两秒后,将调度 FETCH_SUCCESS 事件。

最佳答案

事实证明,我需要将两个事件包装在 mergeMap 中。感谢 RxJS Gitter channel 上的 @dorus 提供的答案。

这是我的工作结果:

const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mergeMapTo(Observable.of({ type: 'FETCH_REQUEST' })
.concat(Observable.of({ type: 'FETCH_SUCCESS' })
.delay(1000)))

merge 应该可以代替 concat,但我认为 concat 具有更好的语义意义。

关于javascript - 使用 Redux-Observable 调度延迟的第二个操作,同时保留第一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42324401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com