在 redux saga 中将所有(并行请求)放入队列?
yield all (parallel requests) into queue in redux saga?
我有故事:
function* sagaA() { // accumulates all user requests
// do stuff
yield all(users.map((user) => call(sagaB, user));
yield put(SUCCESS ACTION);
}
function* sagaB(user) { // is responsible for single request
yield call(api, user);
// do stuff
}
function* watch() { // watches for the action
yield take('REQUEST', sagaA);
}
但是,在这种情况下,请求是并行的,它们没有排队。
问题: 如何修改这个 sagas 以便它们被一个一个地调用?
您可以使用常规 for
循环:
function* sagaA() {
for(const user of users) {
yield call(sagaB, user);
}
yield put(SUCCESS_ACTION);
}
我有故事:
function* sagaA() { // accumulates all user requests
// do stuff
yield all(users.map((user) => call(sagaB, user));
yield put(SUCCESS ACTION);
}
function* sagaB(user) { // is responsible for single request
yield call(api, user);
// do stuff
}
function* watch() { // watches for the action
yield take('REQUEST', sagaA);
}
但是,在这种情况下,请求是并行的,它们没有排队。
问题: 如何修改这个 sagas 以便它们被一个一个地调用?
您可以使用常规 for
循环:
function* sagaA() {
for(const user of users) {
yield call(sagaB, user);
}
yield put(SUCCESS_ACTION);
}