Avoid using Promise.prototype.finally to better support older devices #1224
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Starting with the for-now-unreleased
v3.30.0
release, due to the fact that we completely removed RxJS from the code, we started relying much more on Promises and on its related methods.After encountering a curious issue on Panasonic TVs while investigating #1219, we saw that the
finally
method on Promises was poorly supported on some devices, and to our surprise even if a Promise polyfill was added.After evaluating what we could do, I decided to just ban the
finally
method from the RxPlayer code and replace it by duplicating its logic in Promises' resolve and failure handlers.To ensure that those methods are not used on future developments, I also added an eslint rule (and plugin) to ban the
finally
method. Sadly, this plugin does not check if afinally
method call is actually done on a Promise instance, so I had here to just ban the method altogether (to prevent future confusion, I clearly indicated in the error message that the linting rule was naively banning allfinally
method calls).I also tried to override a Promise's finally method through TypeScript, but this solution appeared much more hacky than I first thought. I think a linting rule is a better solution for now.