Я попытался реализовать это, как показано ниже, и, похоже, оно работает.
export class SagaRegistry {
constructor() {
this._emitChange = null;
this._sagas = {};
}
getSagas() {
return { ...this._sagas };
}
register(name, saga) {
if (this._sagas[name]) {
return;
}
this._sagas = { ...this._sagas, [name]: saga };
if (this._emitChange) {
this._emitChange(saga);
}
}
setChangeListener(listener) {
this._emitChange = listener;
}
}
const sagaRegistry = new SagaRegistry();
export default sagaRegistry;
И запустить сагу вот так.
sagaRegistry.setChangeListener(saga => {
sagaMiddleware.run(saga);
});