等待多个动作,然后再执行redux-saga

时间:2020-10-21 09:13:06

标签: javascript redux-saga saga take es6-generator

假设您有一个传奇,可以获取物品列表。对于每个获取的项目,您还需要一个伴随对象。 下面的伪代码从API提取了一些用户,并且每个用户都在发出一个新操作来获取其化身。

function* fetchUsers() {
  try {
    const users = yield call(getUsers)
    yield all(
      users.map(({id}) => id).map(id => put(fetchUserAvatar(id)))
    )

    yield put('FETCH_USER_SUCCESS')
  } catch(e) {
    yield put('FETCH_USER_FAILURE')
  }
}

仅当获取所有头像时,我才想发出FETCH_USER_SUCCESS,即传奇人物发出了fetchUserAvatarFETCH_USER_AVATAR_SUCCESS

因此,我实现了以下解决方案:

FETCH_USER_AVATAR_FAILURE

对我来说有点难看。是否有诸如function* fetchUsers() { try { const users = yield call(getUsers) yield all( users.map(({id}) => id).map(id => put(fetchUserAvatar(id))) ) for(let i = 0; i < users.length; i++) { yield take(['FETCH_USER_AVATAR_SUCCESS', 'FETCH_USER_AVATAR_FAILURE']) } yield put('FETCH_USER_SUCCESS') } catch(e) { yield put('FETCH_USER_FAILURE') } } 之类的效果或类似的技术,我可以在继续进行之前等待N个动作发出? 还是有解决上述问题的替代方案?

0 个答案:

没有答案