Если вы уже использовали обещания, запуск all([call(effect1), call(effect2), call(effect3)])
аналогичен Promise.all или jQuery's $ .when .
В документах для всех,Есть 2 синтаксиса, единственное отличие состоит в том, что они возвращают массив результатов или объект результатов.
Когда вы используете любой из синтаксисов, redux-saga будет запускать каждый эффект параллельно, после того как все они завершатся, он вернет результаты в виде массива или объекта.
// all([...effects]) - returns an array of results
const [customers, products] = yield all([
call(fetchCustomers),
call(fetchProducts)
])
// all({ a: effectA, b: effectB }) - returns an object of results
const { customers, products } = yield all({
customers: call(fetchCustomers),
products: call(fetchProducts)
})
В обоих этих примерах, саге на редукцию немедленно запустятся fetchCustomers и fetchProducts, а когда они оба будут выполнены, он вернет результат обратно в сагу.
Если какой-либо из эффектов потерпит неудачу или выкинетошибка, redux-saga выбросит эту ошибку обратно в ваш сагу / генератор, и вам придется справиться с этим с помощью try/catch
Запуск эффектов параллельно выглядит по сравнению сзапуск их последовательно
// parallel
1. run effect A
2. run effect B
3. wait for responses... (imagine this takes 1 second)
4. get result B
5. get result A
6. continue saga
// sequentially
1. run effect A
2. wait for response.... (imagine this takes 1 second)
3. get result A
4. run effect B
5. wait for response... (wait another second)
6. get result B
7. continue saga