anycable-client icon indicating copy to clipboard operation
anycable-client copied to clipboard

ActionCableSubscription#perform now returns a promise

Open cmdoptesc opened this issue 1 year ago • 1 comments

So this deviates from the ActionCable JS client a where it returns a boolean: https://github.com/rails/rails/blob/242216803ee73f528b0a74c6bdb367e5b98d8f83/actioncable/app/assets/javascripts/action_cable.js#L318

Long trace of ActionCable.Subscriptions -> ActionCable.Consumer: https://github.com/rails/rails/blob/242216803ee73f528b0a74c6bdb367e5b98d8f83/actioncable/app/assets/javascripts/action_cable.js#L140

But for our purposes, we noticed sometimes AnyCable's ActionCableSubscription#perform is called on a closed subscription and raises an error (should now be adjustable in 0.9.2 thanks!), but it would be nice to catch and handle those errors.

Channel#perform already surfaces the promise, so why not just surface it one more level? https://github.com/anycable/anycable-client/blob/62674a8207b6add893677369106766c7baa234f4/packages/core/channel/index.js#L120

cmdoptesc avatar Dec 13 '24 19:12 cmdoptesc

So this deviates from the ActionCable JS client a where it returns a boolean:

Good catch. I think, a proper fix would be to return boolean as well (and check the connection state to return false when it's closed).

Otherwise our implementation would deviate even more from the Action Cable one.

That doesn't help with the original goal—catching errors. But for that, I think, the right way is to use AnyCable channels instead of the Action Cable wrapper.

palkan avatar Dec 13 '24 23:12 palkan