goatslacker / alt

Isomorphic flux implementation
http://alt.js.org/
3.45k stars 322 forks source link

How to handle data dependencies with Async #644

Open ghost opened 8 years ago

ghost commented 8 years ago

I am currently trying to manage data dependencies in a react app. Usually I would just use waitFor, but this doesnt seem to do here, since it won't wait for the async data fetching, just for the sync operations.

Depender:

    @bind(Actions.showUserForm)
    showUserForm(id) {
      const user = UserStore.getState()[id];
      this.setState({form: createPrefil(user});
    }

Dependee:

    @bind(Actions.getUser, showUserForm.showUser)
    getUser(id) {
      this.getInstance().getUser(id);
    }

    @bind(Actions.getUserSucc)
    getUserSucc(user) {
      this.setState({ [user.id]: user })
    }

Dependee Source

    export default {
      getUser: {
        remote: (state, id) => UserAPI.get(id),
        success: Actions.getUserSucc
      },
    };

The Depender needs somehow to wait for the Dependees async response with the user data. I could just listen to the success action, though this would trigger the Depender everytime a user is fetched from the backend.

Is there an idiomatic solution for those kind of problems?