# JS Quiz: Easy: Async return in finally

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

<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:** [June 16, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-easy-async-return-in-finally/682113/1 "2026-06-16T07: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-easy-async-return-in-finally/682113/1))_

---

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [June 17, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-easy-async-return-in-finally/682113/2 "2026-06-17T07:00:20Z")

</div>

I’d pick “B” because the `return` in `finally` overrides the `return` in `try`, so the promise resolves to `B`. It logs `B` — that `return 'B'` in `finally` has the last word, even in an `async` function.

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

f().then(console.log);

```

The slightly nasty part is that `finally` is basically “last word wins” here; it’ll even stomp on a thrown error the same way, which can hide failures if you’re not careful.

---

<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:** [June 17, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-easy-async-return-in-finally/682113/3 "2026-06-17T07:00:25Z")

</div>

It logs `B`. A `return` inside `finally` overrides whatever happened in the `try`, even in an `async` function, so the promise resolves with `'B'`.

And yeah, it feels kind of rude — `finally` can absolutely change the outcome (and it can swallow errors too), so it’s not “cleanup only” in practice.

---

<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:** [June 24, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-easy-async-return-in-finally/682113/4 "2026-06-24T07:00:06Z")

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

WaffleFries
