Эффект в redux-saga - это простой объект, описывающий побочный эффект .Идея состоит в том, чтобы вместо непосредственного выполнения «эффекта» (который может быть обычным вызовом функции, или put
, или select
и т. Д.), Вы получаете объект Effect, описывающий операцию для redux-saga, ибиблиотека решает, что с ней делать (что, в случае call
, просто выполнит вашу функцию).Основанием для этого является то, что он гипотетически облегчает тестирование, поскольку вы можете запускать сагу как обычный генератор и просто сравнивать получаемые объекты без необходимости что-либо насмехаться.
Тот факт, что эффекты, обещания и генераторыВ большинстве случаев взаимозаменяемы в redux-saga - это просто удобная функция библиотеки.Обещания и генераторы сами по себе не являются Эффектами, но они используются достаточно часто в коде Redx-Saga, и автор видит выгоду в поддержке их как первоклассных граждан.Например, yield
выполнение Обещания будет блокироваться до тех пор, пока обещание не разрешится, а выполнение yield call
для функции, которая возвращает Обещание, сделает то же самое.Это не имеет ничего общего с эффектами, поэтому документация немного вводит в заблуждение.(Если вы посмотрите на определение TypeScript для all
, вы увидите, что на самом деле существует его универсальная версия, которая принимает параметры любого типа, а не только Effects.)