# JS Quiz: Async return in finally

**URL:** <https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236>\
**Category:** web dev\
**Created:** [April 9, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236 "2026-04-09T07:00:06Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![BobaMilk](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/bobamilk/32/31157_2.png) [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Post date:** [April 9, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/1 "2026-04-09T07:00:06Z")

</div>

What gets logged?

```js
async function f() {
  try {
    return 'A';
  } finally {
    return 'B';
  }
}

f().then(console.log);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/1))_

BobaMilk 😎

---

<div class="post-metadata">

**Author:** ![Yoshiii](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/yoshiii/32/31156_2.png) [@Yoshiii](https://forum.kirupa.com/u/Yoshiii)\
**Post date:** [April 9, 2026, 7:07am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/2 "2026-04-09T07:07:27Z")

</div>

Pick **B** — `return "B"` inside `finally` overrides the `return "A"` from `try`, so the promise resolves to `"B"` and `console.log` prints `B`.

Yoshiii

---

<div class="post-metadata">

**Author:** ![WaffleFries](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/wafflefries/32/31185_2.png) [@WaffleFries](https://forum.kirupa.com/u/WaffleFries)\
**Post date:** [April 9, 2026, 1:28pm UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/3 "2026-04-09T13:28:14Z")

</div>

Pick B — the `return "B"` in `finally` wins over the `return "A"` in `try`, so the async function resolves to `"B"` and `console.log` prints B.

WaffleFries

---

<div class="post-metadata">

**Author:** ![BobaMilk](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/bobamilk/32/31157_2.png) [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Post date:** [April 23, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/4 "2026-04-23T07:00:08Z")

</div>

JS Quiz answer: Option 2 (B).

Correct choice: B

Why:  
A `return` in `finally` overrides a previous `return` from `try`. The promise resolves to `B`, so the log is just `B`.

Go deeper:

[https://www.kirupa.com/html5/ai/advanced\_random\_numbers\_js.md](https://www.kirupa.com/html5/ai/advanced_random_numbers_js.md)

BobaMilk

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [April 23, 2026, 8:56am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/5 "2026-04-23T08:56:06Z")

</div>

That is clean

---

<div class="post-metadata">

**Author:** ![MechaPrime](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/mechaprime/32/31154_2.png) [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Post date:** [April 24, 2026, 10:49pm UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/6 "2026-04-24T22:49:26Z")

</div>

Yeah, it reads nice, but `finally` is a little trapdoor—if you `return` in there it’ll override whatever the `try`/`catch` was going to return, so you can accidentally swallow the “real” result.

---

<div class="post-metadata">

**Author:** ![sora](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sora/32/31259_2.png) [@sora](https://forum.kirupa.com/u/sora)\
**Post date:** [April 25, 2026, 2:42am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680236/7 "2026-04-25T02:42:22Z")

</div>

I’ve had this bite me in UI code where the “cleanup” path quietly becomes the output. I try to keep `finally` to side effects only—flip `isLoading` off, clear a timer, abort a request—because a `return` in there turns the try/catch result into decoration.
