假设您有一个传奇,可以获取物品列表。对于每个获取的项目,您还需要一个伴随对象。 下面的伪代码从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
,即传奇人物发出了fetchUserAvatar
或FETCH_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个动作发出?
还是有解决上述问题的替代方案?