Я хочу знать, как правильно в Redux Saga добиться следующего поведения:
- Действие отправляется взаимодействием с пользователем.
- Соответствующая сага о прослушивании теперь пытается извлечь данные из API, вызвав несколько асинхронных методов параллельно.
- При каждом успешном ответе независимо от остальных запросов отправляется действие с извлеченными данными (таким образом, обновляется пользовательский интерфейс и т. Д.).
- Ошибочные ответы собираются и затем отправляются одним действием после того, как все запросы завершены (например, для последующего показа одного сообщения об ошибке).
Я успешно реализовалиспользуя следующий шаблон (извините, у меня нет полных примеров кода, в данный момент он недоступен):
function* fetchData(dataType) {
const resp = yield call(MyApi.fetchData, dataType);
if(!resp.err) {
yield put(fetchDataSuccess, resp.data);
} else {
return resp.err;
}
}
function* mySaga() {
const errors = yield all([
call(fetchData, 'typeOne'),
call(fetchData, 'typeTwo),
call(fetchData, 'typeThree)
]);
// errors contains the returned errors
}
Это лучший способ достичь желаемого эффекта?