-
-
Couldn't load subscription status.
- Fork 1.2k
Description
Hi,
Forgive any poor terminology, I'm relatively new at redux.
I have created a test reducer (uselessReducer), a listenerMiddleware, and my general appMiddleware.
uselessReducer has an action, updateStatus. the listenerMiddleware has an actionCreator on updateStatus.
In my general appMiddleware, if the useless/init case is triggered, the updateStatus action is dispatched and my listener is triggered, its condition is met (connected: true) and it executes as expected. All good.
return function (next) {
return function (action) {
switch (action.type) {
case "useless/init":
store.dispatch(updateStatus({ connected: true, status: "connected" }));
return
default:
break;
}
return next(action);
};
};Here's the listener:
listenerMiddleware.startListening({
actionCreator: updateStatus,
effect: async (action, listenerApi) => {
// Can cancel other running instances
listenerApi.cancelActiveListeners()
console.log("LISTENER RUNNING")
if (await listenerApi.condition((action, currentState) =>
currentState.useless.connected === true
)){
console.log("LISTENER TRIGGERED")
}
}
})However, if I change the appMiddleware and dispatch the action inside the .then(..), then the action is correctly dispatched, the listener is run, but the condition doesn't work and the following code is never executed. I must be missing something pretty fundamental, but can't figure out what! What am I missing here?
case "useless/init":
axios.get("http://somewebsite.xxx/").then((res) => {
store.dispatch(updateStatus({ connected: true, status: "connected" }));
});
return