【问题标题】:Loop a certain amount of times循环一定次数
【发布时间】:2019-04-15 09:26:34
【问题描述】:

我有一个动作,它的有效载荷为.times。我想循环这么多次,我这样做了:

function upAsyncEpic(action$: Observable<Action>, state$: StateObservable<State>): Observable<Action> {
    return action$.pipe(
        ofType(UP_ASYNC),
        delay(1000),
        mapTo(up())
    );
}

这不会循环它只会发生一次。我希望它循环“延迟”然后“mapTo”action.times 次。我试过这个:

    return action$.pipe(
        ofType(UP_ASYNC),
        repeat(action => action.times),
        delay(1000),
        mapTo(up())
    );

但这不起作用。超级全新的 redux-observables,刚刚学习。

基本上我想要的是如果有人发送动作{ type: 'UP_ASYNC', times: 5 } 应该发生的是这样的:

            delay(1000),
            mapTo(up())
            delay(1000),
            mapTo(up())
            delay(1000),
            mapTo(up())
            delay(1000),
            mapTo(up())
            delay(1000),
            mapTo(up())

【问题讨论】:

  • 也许stackoverflow.com/questions/44511566/… 显示了您在行动中需要什么?如果这种方法用于其他用途,我们深表歉意。
  • 感谢@ocæon,但我认为这不是我要找的。我在帖子底部添加了一个说明性示例。

标签: redux-observable


【解决方案1】:

问题:repeat() 将整数作为参数来重复计数。

签名:

repeat(count: number): ObservableDocumentation.

Example 来自 learnrxjs

您的示例将如下所示:

function upAsyncEpic(
  action$: Observable<Action>,
  state$: StateObservable<State>
): Observable<Action> {
  let count = 0;

  const source = action$.pipe(
    ofType(UP_ASYNC),
    map(({ times }) => {
      count = times;
    }),
    delay(1000),
    mapTo(up())
  );

  return source.pipe(repeat(count));
}


【讨论】:

  • 由于某种原因它不起作用:(我试过:(还有没有本地全局的方法吗?我搜索了learnrxjs但找不到。:(
  • 是否可以像action$.pipe(ofType(UP_ASYNC).pipe(delay(1000), mapTo(up()), repeat(action =&gt; action.times))那样做单链
  • 首先,你不能传递一个函数来重复。您需要传递一个整数。其次,你的up() 函数是做什么的?另外,它会抛出任何错误吗?
  • 感谢 Haroon,up() 是一个 redux 操作。它返回{ type: 'UP' }。它应该调度这些动作。
  • 间隔运行无限次。你应该使用 delay() 和 repeat()
猜你喜欢
  • 2019-01-21
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多