多次调用sagaMiddleware.run是否安全?

时间:2018-09-14 02:29:56

标签: javascript reactjs typescript redux redux-saga

我在应用程序中使用redux和redux-saga来管理状态和异步操作。为了使我的生活更轻松,我编写了一个类,该类本质上充当了传奇经理,并使用了一种“注册”传奇的方法。此注册方法派生新的传奇,并使用redux-saga/effects/all将其与所有其他注册的传奇结合起来:

class SagasManager {
    public registerSaga = (saga: any) => {
        this._sagas.push(fork(saga));
        this._combined = all(this._sagas);
    }
}

我的商店然后使用该类来获取_combined传奇,据说是在注册了所有的传奇之后:

const store = Redux.createStore(
    reducer, 
    initialState, 
    compose(Redux.applyMiddleware(sagaMiddleware, otherMiddleware)),
);
sagaMiddleware.run(sagasManager.getSaga());

但是,我遇到了一个问题,即根据情况(例如导入顺序),这并不总是能按预期工作。发生的事情是,在调用sagaMiddleware.run之前,没有对某些sagas进行注册。

我通过在SagasManager上提供回调来解决此问题:

class SagasManager {
    public registerSaga = (saga: any) => {
        this._sagas.push(fork(saga));
        this._combined = all(this._sagas);
        this.onSagaRegister();
    }
}

然后商店代码可以将其用作

sagasManager.onSagaRegister = () => sagaMiddleware.run(sagasManager.getSaga());

这似乎可行,但是我在文档中找不到这是否安全。我确实看到.run返回了Task,它具有取消的方法等,但是由于我的问题仅在于构造商店和呈现应用程序之间的尴尬时间,我不这样做。这将是一个问题。

任何人都可以解释这是否安全,如果不能解决,那么会有什么更好的解决办法?

0 个答案:

没有答案