مدیریت ارور در createAsyncThunk

پرسیده شده
فعالیت 920 روز پیش
دیده شده 396 بار
0

سلام جناب سوری وقتتون بخیر

 

ببخشید برای زمانی که ما نیاز داریم طبق یک شرطی حالت reject رو اجرا کنیم چطور میتونیم عمل کنیم

مثلا من یک api دارم که برای ورود کاربر چه اطلاعات درست باشه چه نباشه استاتوس کد 200 میده بعد داخل status معلوم میشه که یوزر پسورد درست بوده یا نه.

من برای اینکه بتونم زمانی که اطلاعات اشتباه بود حالت rejected رو اجرا کنم اینطور عمل کردم:

export const fetchToken = createAsyncThunk(
    'user/login',
    async ({username, password}) => {
        try {
            const {data} = await http.post('/auth/login', {
                username,
                password
            });
            if(data.status === 'Error') throw data;
            return data;
        }
        catch (err) {
            throw {
                message: err.msg,
            };
        }
    }
)
const userSlice = createSlice({
    name: 'user',
    initialState,
    reducers: {},
    extraReducers: builder => {
        builder.addCase(fetchToken.fulfilled, (state, {payload}) => {
            state.token = payload.token;
            state.error = null;
        });
        builder.addCase(fetchToken.rejected, (state, {error}) => {
            state.error = error;
        })
    }
});

به نظرتون راه حل بهتری وجود داره؟

و اینکه الان یه مشکلی هست که ادیتور من زمانی که داخل try یک چیزی رو throw  میکنم این وارنینگ رو میده:

 

'throw' of exception caught locally 
 Inspection info: Reports a throw statement whose exceptions are always caught by the containing try statement. Using throw statements as a goto to change the local flow of control is confusing.

آیا راه حل دیگه ای به جز throw کردن وجود داره؟

فایل پیوست

محمد علی ناصری
محمد علی ناصری

29 شهریور 00

0
حذف شده

برای انجام عملیات reject کردن اگر از قبل شرایط مشخص و بخوای خودت مشخص بکنی که چه مقداری در payload قرار بگیره در شرایطی که به error بخوری میتونی از متد rejectWithValue استفاده بکنی مثال و نحوه استفاده از این متد هم برمیگرده به شرایطی که داری و چند نمونه رو میتونی در داکیومنت در لینک مشاهده بکنی (اگر با مثال ها مشکل داشتی اعلام بکن بیشتر در این مورد توضیح بدم)

 

در مورد استفاده از toastify روش های مختلفی وجود داره! از اینکه مثل اون حالتی که خودت گفتی انجام بدی تا اضافه کردن یک middleware و ... اصولا باید ببین برای اون پروژه کدوم راحت تر و مناسب تر

یک نمونه middleware رو میتونی در این لینک مشاهده بکنی

فایل پیوست

مجتبی سوری

توسط

مجتبی سوری

29 شهریور 00

0
حذف شده

و اینکه من میخوام از toastify استفاده کنم داخل داکیومنت خودش برای استفاده در کنار redux متد رو داخل action creator صدا زده بود وقتی از حالت بالا استفاده میکنیم مجاز هستیم اون رو داخل extra reducer ها اجرا کنیم یا باید داخل فانکشنی که با cerateAsyncThunk نوشتیم اجرا بشه

فایل پیوست

محمد علی ناصری

توسط

محمد علی ناصری

29 شهریور 00

جلسه مدیریت چرخه عملیات های async با استفاده از createAsyncThunk (بخش دوم)