Redux Toolkit 额外的减速器如何有条件地执行?

How Redux Toolkit extra reducers execute conditionally?

使用 redux-toolkit 一切正常。但即使在获取数据时出现错误 dismissAll 操作仍然有效,我无法阻止它执行。

import { createEntityAdapter, createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import firebaseService from 'app/services/firebaseService';

export const dismissAll = createAsyncThunk('notificationPanel/data/dismissAll', async (params, { getState }) => {
    const { user } = getState().auth;
    try {
        await firebaseService.realtimeDB.ref(`notifications/${user.uid}/alerts`).remove();
        return true;
    } catch (error) {
        console.log(error);
    }
});

const notificationsAdapter = createEntityAdapter({});

const initialState = notificationsAdapter.getInitialState();

export const {
    selectAll: selectNotifications,
    selectById: selectNotificationsById
} = notificationsAdapter.getSelectors(state => state.notificationPanel.data);

const dataSlice = createSlice({
    name: 'notificationPanel/data',
    initialState,
    reducers: {
        addNotification: (state, action) => notificationsAdapter.addOne(state, action.payload)
    },
    extraReducers: {
        [getNotifications.fulfilled]: (state, action) => notificationsAdapter.addMany(state, action.payload),
        [dismissItem.fulfilled]: (state, action) => notificationsAdapter.removeOne,
        [dismissAll.fulfilled]: (state, action) => notificationsAdapter.removeAll
    }
});

我试过类似的方法:

[dismissAll.fulfilled]: (state, action) => { 
   if (action.payload === true) notificationsAdapter.removeAll 
}

但它 returns 错误使用。

如何有条件地执行它?

如果有错误,如果你已经处理了它,createAsyncThunk 将不会拾取它 - 因为从 createAsyncThunk 的角度来看,没有错误。

要么删除 try..catch 包装,要么在 catch 块中删除 throw error 以重新引发错误。在这种情况下,cAT 将停止发送已完成的操作,转而发送被拒绝的操作。