从产量放置中设置冗余状态.花很多时间



我正面临React Native,来自Redux Saga的更新状态。 后面是来自 Saga 的代码调用,仅用于将标志设置为"真/假"。 设置数据需要 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.setAuthIsLoad) 调用,它最多需要 5 秒......

你能帮我吗?

这两个代码块没有可比性。在 Redux 传奇中,您在两个点(产量)暂停执行,这意味着可能需要任何时间,具体取决于正在运行的其他生成器(sagas)将控制权返回给挂起的生成器。一旦你yield由消耗yielded事件的任何因素来决定是否以及何时继续从生成器使用,因此 5 秒的延迟表明许多其他代码被优先考虑。

此外,yield delay(200)当然会让你的传奇花费超过 5 毫秒的时间。

生成器的这种行为就是为什么在 Redux 传奇中,你真的、真的不应该在任何地方都有阻塞代码。

相关内容

  • 没有找到相关文章

最新更新