Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
The difference becomes obvious when we look at the code inside a function.
Forskellen bliver tydelig, når vi kigger på koden inde i en funktion.

The behavior is different if there's a "jump out" of `try...catch`.
Det er forskelligt, hvis der er et "spring ud" af `try...catch`.

For instance, when there's a `return` inside `try...catch`. The `finally` clause works in case of *any* exit from `try...catch`, even via the `return` statement: right after `try...catch` is done, but before the calling code gets the control.
For eksempel, når der er en `return` inde i `try...catch`. `finally`-klausulen virker i tilfældet af *hvilken som helst* afslutning fra `try...catch`, selv via `return`-sætningen: lige efter `try...catch` er færdig, men før den kaldende kode får kontrollen.

```js run
function f() {
try {
alert('start');
*!*
return "result";
return "resultat";
*/!*
} catch (err) {
/// ...
} finally {
alert('cleanup!');
alert('oprydning!');
}
}

f(); // cleanup!
f(); // oprydning!
```

...Or when there's a `throw`, like here:
...eller hvis der er en `throw`, som her:

```js run
function f() {
try {
alert('start');
throw new Error("an error");
throw new Error("en fejl");
} catch (err) {
// ...
if("can't handle the error") {
if("kan ikke håndtere fejlen") {
*!*
throw err;
*/!*
}

} finally {
alert('cleanup!')
alert('oprydning!')
}
}

f(); // cleanup!
f(); // oprydning!
```

It's `finally` that guarantees the cleanup here. If we just put the code at the end of `f`, it wouldn't run in these situations.
Det er `finally` der garanterer oprydningen her. Hvis vi bare sætter koden ved slutningen af `f`, ville den ikke køre i disse situationer.
22 changes: 11 additions & 11 deletions 1-js/10-error-handling/1-try-catch/1-finally-or-code-after/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,35 @@ importance: 5

# Finally or just the code?

Compare the two code fragments.
Sammenlign disse to kodefragmenter.

1. The first one uses `finally` to execute the code after `try...catch`:
1. Den første bruger `finally` til at køre koden efter `try...catch`:

```js
try {
work work
arbejd' arbejd'
} catch (err) {
handle errors
håndter fejl
} finally {
*!*
cleanup the working space
ryd op på arbejdspladsen
*/!*
}
```
2. The second fragment puts the cleaning right after `try...catch`:
2. Den anden placerer oprydningen lige efter `try...catch`:

```js
try {
work work
arbejd' arbejd'
} catch (err) {
handle errors
håndter fejl
}

*!*
cleanup the working space
ryd op på arbejdspladsen
*/!*
```

We definitely need the cleanup after the work, doesn't matter if there was an error or not.
Vi skal selvfølgelig have oprydningen efter arbejdet, uanset om der var en fejl eller ej.

Is there an advantage here in using `finally` or both code fragments are equal? If there is such an advantage, then give an example when it matters.
Er der en fordel i at bruge `finally` eller er de to kodefragmenter ens? Hvis der er en sådan fordel, så giv et eksempel på, når det betyder noget.
Loading