mercredi 1 mars 2017

What can be done about ember actions that may be fired after the user has transitioned to a new route?

I am having a problem with actions that occur asynchronously occasionally not getting handled.

In my Ember app I sometimes receive the error:

Nothing handled the action 'X'. If you did handle the action, this error
can be caused by returning true from an action handler in a controller,
causing the action to bubble.

Where X is the name of some action. The problem is not that the action is bubbling or that the handler is not defined, because it works almost all the time.

The problem, rather, relates to to fact the this.send('X') is called in a promise callback, e.g., after saving a model:

model.save().then(() => {
    this.send('X');
});

If the save encounters some network congestion or a delay on my server then the user might have navigated to another route by the time the promise is resolved. And that route might not have an action X defined (or worse perhaps it's the wrong action of the same name).

Is using actions here a fundamental design flaw?

If so, this would seem to severely limit the utility of actions, because they couldn't be used in any asynchronous context.

Or is there some way that transitions out of a route can delayed until any pending async stuff is resolved? (though this might create it's own undesirable symptoms)




Aucun commentaire:

Enregistrer un commentaire