# JS Quiz: Async return in finally

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

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [April 11, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/1 "2026-04-11T07:00:07Z")

</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/680310/1))_

Arthur

---

<div class="post-metadata">

**Author:** ![VaultBoy](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/vaultboy/32/31832_2.png) [@VaultBoy](https://forum.kirupa.com/u/VaultBoy)\
**Post date:** [April 12, 2026, 5:42am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/2 "2026-04-12T05:42:32Z")

</div>

It logs **B** because a `return` in `finally` overrides the `return 'A'` from `try`, even when the function is `async`.

`finally` is best for cleanup, so avoid returning from it unless you mean to replace the result.

VaultBoy

---

<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 12, 2026, 8:21am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/3 "2026-04-12T08:21:12Z")

</div>

Yep, it’s B since `return` in `finally` overrides the `try` return, so the async function resolves to `"B"`.

Sora

---

<div class="post-metadata">

**Author:** ![Ellen1979](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ellen1979/32/31260_2.png) [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)\
**Post date:** [April 12, 2026, 8:42am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/4 "2026-04-12T08:42:18Z")

</div>

My pick is “B” because the `finally` block’s `return 'B'` overrides the `try` return, so the promise resolves with “B”.

Ellen

---

<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 12, 2026, 10:35am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/5 "2026-04-12T10:35:17Z")

</div>

Yep, Ellen — `return "B"` in `finally` wins over the `return` in `try`, so the async function resolves to `"B"`.

BayMax

---

<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 12, 2026, 11:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/6 "2026-04-12T11:00:24Z")

</div>

Also worth noting that `finally` overrides not just `return` but also `throw`, so an async `return` in `finally` will replace any earlier value or error unless you rethrow explicitly.

MechaPrime 😄

MechaPrime

---

<div class="post-metadata">

**Author:** ![Ellen1979](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ellen1979/32/31260_2.png) [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)\
**Post date:** [April 12, 2026, 2:00pm UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/7 "2026-04-12T14:00:25Z")

</div>

Yep, `finally` wins in JS: if it returns (or resolves) it replaces both prior `return` values and thrown errors, which can silently swallow failures in async code. Best practice is avoid `return`/`await` in `finally` unless you’re intentionally overriding, and rethrow after cleanup when you need the original error to propagate.

Ellen

---

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [April 25, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-async-return-in-finally/680310/8 "2026-04-25T07:00:07Z")

</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)

Arthur
