Estoy tratando de devolver dos estados diferentes según el temporizador establecido en setTimeout en los bloques try/finally, pero una vez que devuelvo el estado en el bloque try, el bloque finalmente no devuelve nada. ¿Hay alguna manera de evitar esto? Estoy tratando de pasar un valor de cadena que será una notificación y luego, 5 segundos después, devolver una cadena vacía para que la notificación pueda borrarse...
import { createSlice } from "@reduxjs/toolkit"; const notificationSlice = createSlice({ name: 'notification', initialState: '', reducers: { createNotification: { reducer(state, action) { try { state = `You voted for ${action.payload[0]}` } finally { setTimeout(() => { state = ' ' }, 5000); } return state }, prepare(...args) { return { payload: args } } } }}) export const { createNotification } = notificationSlice.actions export default notificationSlice.reducerDebido a que setTimeout es asíncrono, el return state en realidad se ejecuta antes de que se ejecute la devolución de llamada de setTimeout.
Entonces, su estado se devuelve primero, luego, cuando se ejecuta la devolución de llamada, no hará nada. No creo que el try...finally haga alguna diferencia aquí.
Tendría que implementar otro método reduces , para cerrar la notificación, y ejecutarlo con un setTimeout .
(lo siento, no estoy seguro de cómo se vería eso aquí, pero eso es lo que tenía que hacer cuando trabajé con reductores de reacción)
Puede devolver un objeto en lugar de una cadena.
try { state.foo = `You voted for ${action.payload[0]}` } finally { setTimeout(() => { state.foo = '' }, 1000); } return state