将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 类型。但是,您实际上可能必须自己指定 - 它不应该随机出现。
我有一个项目,我在其中将 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 类型。但是,您实际上可能必须自己指定 - 它不应该随机出现。