将Redux-Thunk中间件应用到redux中是否改变了所有异步执行的动作?

Does applying Redux-Thunk midleware to redux change all actions to be executed asynchronously?

我有一个项目,我在其中将 redux-thunk 中间件应用于我的 redux 存储。现在我的代码中有几个 thunk,它们也在被分派,但是它们 return ThunkAction<Promise<void>, void, void, AnyAction> 所以我假设它们是异步的。

在我代码的其他地方,我直接调用商店的调度方法。由于应用中间件的影响,此操作是否也会变得异步或它们是否保持同步?

例如如果我这样做:

store.dispatch(someAction);

那仍然是同步的吗?

提前致谢。

是的。

默认情况下,调度是 100% 同步的。

如果您添加中间件,中间件可能改变、延迟或停止通过调度管道进行的操作。

但是,在这种情况下,redux-thunk 中间件不会执行任何异步操作。它只是检查 "action" 是否实际上是一个函数,如果是,则立即执行它:

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

    return next(action);
  };
}

如果应用了 thunk 中间件,store.dispatch(someThunkFunction) 将 return 无论 thunk 函数 return 是什么。因此,如果您 return 来自 thunk 的承诺,则该承诺将 return 来自 store.dispatch()

对于 TS 类型,第一个通用参数应指示 thunk 函数的预期 return 类型。但是,您实际上可能必须自己指定 - 它不应该随机出现。