🪟 🔧 Cleaner error handling for authService's sendVerificationEmail
#21763
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.
What
When I first extracted this error handling code from
EmailVerificationHint.tsx
in #21623 so the enrollment modal could take advantage of it too, I missed a basic structural fix (because the internal API defined inauthService
had an identical type signature as the upstreamfirebase/auth
function it wrapped, it Seemed Obvious:tm: that it was appropriate to port its error-handling code unchanged). To wit: because it handled errors within thePromise
, rather than via thePromise
, success/error code paths were being defined in different scopes; the only way to invalidate a downstream.then
which should only run on success was to reraise the error. This lead to arbitrary and ugly.catch()
es getting tacked onto both usage sites just to avoid crashing the page from an already-handled error.But, like: that's the whole reason
Promise.prototype.catch
exists, though.Testing
Manually tested via the enrollment modal, behaves exactly as before in both error and success states.