Do not use "finally" on promises returned by "getUserMedia" #4055
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.
Follow up to #3913
Promise.finallyis available in older browsers for "hand-made" promises, probably due to a shim or to the code being transpiled (I have not checked). However, it is not available for internal promises returned bynavigator.mediaDevices.getUserMedia().Moreover, in some browser versions (Firefox >= 58 && <= 68) there seems to be a clash between the internal promise and the shimed/transpiled one, as
Promise.finallyis available forgetUserMediapromises, but not when used in Nextcloud.Due to all that
finallyuses were replaced by a function called at the end ofthenandcatch.new Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> finally is not a functionnavigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> finally is not a functionnew Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍navigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> finally is not a functionnew Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍navigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍new Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍navigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> finally is not a functionnew Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍navigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍new Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000) }).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍navigator.mediaDevices.getUserMedia({audio: true}).then(() => { console.log('Done') }).finally(() => { console.log('Finally') })-> Works 👍