Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature ask] getter to ask if the store has been torn down #86

Open
jeroldalbertson-wf opened this issue Sep 20, 2023 · 1 comment
Open

Comments

@jeroldalbertson-wf
Copy link

jeroldalbertson-wf commented Sep 20, 2023

HI 👋 Redux Team,

I've got a redux store that exists briefly and sometimes it can be disposed of while a long running middleware server call is in flight. If I try to dispatch another action to set store state following that async call, there's an exception thrown because the store's change stream has been closed. To prevent those exceptions caused by calling dispatch on a torn-down store, it would be nice to be able to ask the store if it's still open to change.

Right now I have the following extension for this, but it requires getting tricky with the onChange stream.

extension StoreSafeAsyncDispatch on Store {
  /// if a store is closed it can not dispatch actions or apply changes
  Future<bool> get isClosed async {
    var closed = false;
    await onChange.listen((_) {}, onDone: () => closed = true).cancel();
    return closed;
  }

  /// only dispatch if the store is not closed
  Future<dynamic> asyncDispatch(dynamic action) async {
    if (await isClosed) return;
    return dispatch(action);
  }
}

Thanks for your time and consideration!

@long1eu
Copy link

long1eu commented Dec 19, 2023

But when do you close the state? Where do you do store.teardown();? Also I don't think we should ever call this, because we need the Store as long as pe app is alive.

Docs say:

Closes down the Store so it will no longer be operational. Only use this
if you want to destroy the Store while your app is running. Do not use
this method as a way to stop listening to [onChange] state changes. For
that purpose, view the [onChange] documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants