根据文档,在可观察对象中延迟操作非常简单:
const pingEpic = action$ =>
action$.ofType('PING')
.delay(1000) // Asynchronously wait 1000ms then continue
.mapTo({ type: 'PONG' });
但是我想根据操作有效负载中的某些值来延迟操作。例如这样的事情(什么不起作用):
const pingEpic = action$ =>
action$.ofType('PING')
.delay(action => action.payload.delayTime) // Asynchronously wait the time defined within the action then continue
.mapTo({ type: 'PONG' });
不幸的是.delay()
只需要一个简单的静态值,我不知道如何从动作中设置值。有人知道吗?
为什么我需要它?
这种行为背后的原因是,我在我的史诗中调用了一个 REST API,它在后端创建了一个新项目。当这个调用返回时,我将触发两个动作(通过 flatMap)。一个成功的操作是让 reducer 更新相应的状态,第二个操作是获取后端中所有可用项目的列表。不幸的是,后端有点慢(我无法控制它),因此对所有项目的立即 get 调用会返回一个没有新创建项目的列表。500 毫秒后执行相同的调用会按预期返回任何内容。因为这个“获取整个列表请求”与第一次显示页面时完全相同,我不希望所有请求都有这种延迟,但只有在创建调用后触发它时才会出现这种延迟。
如果没有人能告诉我如何从动作中获得延迟,第二种可能性是使用不同的动作,让另一个史诗简单地听并使用某种硬编码的延迟,但如果我可以通过参数化它会很酷同样的动作。