我试图根据在try/finally块中setTimeout上设置的定时器返回两种不同的状态,但是一旦我在try块中返回状态,最后块不返回任何东西。有办法绕过这个吗?我试图传递一个字符串值,这将是一个通知,然后5秒后返回一个空字符串,所以通知可以清除…
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.reducer
因为setTimeout
是异步的,return state
实际上在setTimeout回调运行之前运行。
所以你的状态首先被返回,然后当回调运行时,它什么也不做。我不认为try...finally
在这里会有什么不同。
你将不得不实现另一个reduces
方法,关闭通知,并运行与setTimeout
.
(对不起,不确定这将如何看这里,但这是我必须做的,当我与反应还原器工作)
可以返回一个对象而不是字符串。
try {
state.foo = `You voted for ${action.payload[0]}`
} finally {
setTimeout(() => {
state.foo = ''
}, 1000);
}
return state