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

У меня есть проект, в котором я применил промежуточное ПО redux-thunk к моему хранилищу redux. Теперь у меня есть несколько преобразователей в моем коде, и они также отправляются, но они возвращают ThunkAction<Promise<void>, void, void, AnyAction>, поэтому я предполагаю, что это асинхронные.

В других местах моего кода я напрямую вызываю метод отправки в магазине. Становятся ли эти действия асинхронными в результате применения промежуточного программного обеспечения или они остаются синхронными?

Например, если я делаю:

store.dispatch(someAction);

Будет ли это по-прежнему синхронно?

Заранее спасибо.


person Jesus    schedule 07.10.2019    source источник


Ответы (1)


да.

По умолчанию диспетчеризация выполняется на 100% синхронно.

Если вы добавляете промежуточное ПО, промежуточное ПО может изменять, задерживать или останавливать выполнение действия по конвейеру отправки.

Однако в этом случае промежуточное ПО redux-thunk не делает ничего асинхронного. Он просто проверяет, действительно ли «действие» является функцией, и, если да, немедленно выполняет его:

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => (next) => (action) => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

Если промежуточное ПО применяется, store.dispatch(someThunkFunction) вернет все, что возвращает функция преобразователя. Итак, если вы вернете обещание из преобразователя, это обещание будет возвращено из store.dispatch().

Для типов TS первый общий аргумент должен указывать ожидаемый тип возврата функции преобразователя. Однако вам, скорее всего, придется указать это самостоятельно - оно не должно появляться случайным образом.

person markerikson    schedule 07.10.2019