Установка избыточного состояния из-за выхода доходности ... займет много времени - PullRequest
0 голосов
/ 19 января 2019

Я сталкиваюсь с React Native, состоянием обновления от Redux Saga. За этим стоит кодовый вызов от Saga только для установки флага в «true / false». На настройку данных уходит от 3-5 секунд.

    console.log(`Start loading flag...`);
    yield put(authActions.setAuthIsLoading(true));
    yield delay(200);

    endTime = new Date();
    diff = moment.duration(endTime - startTime);
    console.log(`Set loading flag, it take ${diff}...`);
    startTime = endTime;

--------------- Результат 5 секунд

Код authActions.setAuthIsLoading

[types.SET_AUTH_IS_LOADING]: (state, action) => {
        var start = new Date();
        console.log('Set auth busy - Start');
        const { payload } = action;
        let result = state;
        if (state.isLoading !== payload)
        {
            result = state.merge({ isLoading: payload });
        }
        var end = new Date();
        var diff = moment.duration(end-start);
        console.log(`Set auth busy - End - Total: ${diff}(ms)`);    
        return result;
    },

---- Это займет около нескольких миллисекунд (максимум 5 миллисекунд)

Я действительно запутался, что установка блока кода установки занимает всего 5 миллисекунд, но вызов через yield put (authActions.setAuthIsLoading) , доходит до 5 секунд ...

Не могли бы вы помочь мне в этом?

1 Ответ

0 голосов
/ 19 января 2019

Два кодовых блока не сравнимы.В саге Redux вы приостанавливаете выполнение в двух точках (доходность), что означает, что может потребоваться любое количество времени в зависимости от запуска других генераторов (саг), чтобы вернуть управление обратно приостановленному генератору.Как только вы yield, то все, что потребляет события yielded, решает, следует ли и когда продолжать потреблять от генератора, поэтому 5-секундная задержка предполагает, что большому количеству другого кода был отдан приоритет.

Кроме того, yield delay(200), конечно, в любом случае заставит вашу сагу занимать больше 5 мс.

Такое поведение генераторов объясняет, почему в саге Redux вам действительно не нужно нигде блокировать код.

...