#javascript #reactjs #redux #react-redux #redux-saga
Вопрос:
У меня есть наблюдатель, похожий на этого
export default function* watch() {
yield takeEvery(getProducts, fetchData)
yield takeEvery(getUser, fetchData)
}
Но в этой форме это не работает, потому что fetchData необходимо запускать один раз и только в том случае, если и GetProducts, и getUser прошли успешно
Можно ли каким-то образом перенести оба действия в takeEvery, или существует аналог takeEvery, который может принимать два или более действий и выполнять функцию fetchData только после успешного выполнения всех переданных действий?
Комментарии:
1.Являются
getProducts
ли иgetUser
возвращают шаблон?2. @Alex да, это шаблон возврата
Ответ №1:
Вы можете использовать all
в сочетании с take
ожиданием двух действий независимо от порядка.
export default function* watch() {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
В случае, если вы хотите снова дождаться этих двух действий после завершения выборки, вы можете обернуть их бесконечным циклом:
export default function* watch() {
while (true) {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
}
Вы также можете заменить call
эффект, fork
если вы не хотите ждать, пока будет выполнена выборка, прежде чем ждать другой пары действий.