Разница между создателем действия, использующим избыточный поток и обычной асинхронной функцией - PullRequest
0 голосов
/ 15 февраля 2019

Итак, я хочу понять не только основы Redux Thunk, но и создал двух создателей действий, один из которых работает и использует Redux Thunk, а другой - только асинхронный, но прерывается. Ниже приведен скриншот:

screenshot

Итак, в обоих создателях действия я ожидаю завершения запроса API, а затем возвращаю действие (объект JS с типом и полезной нагрузкой).

Однако тольковерхний работает, а нижний выдает ошибку, говоря, что действие должно быть простым объектом, хотя я возвращаю простой объект с 2 свойствами.Я действительно изо всех сил пытался понять, почему создатель второго действия тормозит, и было бы очень приятно, если бы кто-то мог подробно объяснить, почему это происходит. Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

Это потому, что когда вы используете thunk, вы возвращаете либо объект, либо функцию.Во втором случае, когда вы отправили свои действия что-то вроде dispatch(fetchUser()), они ничего не возвращали, потому что вы вызываете асинхронный метод.Теперь код ниже await будет выполняться только после того, как все асинхронно выполнено, исходный вызов dispatch(fetchUser()) уже завершен (подсказка: только код ниже await не выполняется, но вызов функции уже завершен), а fetchUser() нетвернуть любой объект, но в первом случае вы на самом деле возвращаете функцию, которая вызывает асинхронный метод.Вот где действительно происходит волшебство промежуточного программного обеспечения.Он выполняет эту функцию и отправляет действие (подсказка: вы возвращаете функцию, которая принимает диспетчеризацию в качестве аргумента), которая выполняется thunk.Надеюсь, это очистит ваши сомнения.Я бы посоветовал вам прочитать, как на самом деле работает async / await (подсказка: циклы событий / однопоточные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...