首页 > 解决方案 > 在 redux-saga 中映射列表时使用延迟

问题描述

我正在使用 redux-saga 向服务器发送一堆请求。我有一个要发送到服务器的名称映射。但我想在发送每个名字之前等待 5 秒

function* sendAllNames() {
  const nameData = ['foo','bar']
  yield nameData
    .map(function*(name) {
      yield delay(5000);
      yield fork(
        sendNameRequest,
        {
          requestType: postRequest,
        },
        {
          name,
        },
      );
    });
}

问题是初始名称在发送前等待 5 秒,但在发送下一个名称时没有延迟。我可以对所有请求强制延迟 5 秒吗?

谢谢

标签: reactjsreduxredux-saga

解决方案


.map不知道用生成器函数做任何特别的事情。Map 将使用数组的每个元素调用生成器,然后使用它获得的迭代器同步返回一个数组。

相反,我建议使用for ... in循环:

function* sendAllNames() {
  const nameData = ['foo','bar'];
  for (const name in nameData) {
    yield delay(5000);
    yield fork(
      sendNameRequest,
      { requestType: postRequest },
      { name },
    );
  }
}

推荐阅读