Przejdź do treści

Obsługa wyjątków

Wystąpienie wyjątku, jeśli nie jest objęte blokiem try powoduje:

  • przerwanie wykonywania skryptu,
  • wyświetlenie komunikatu błędu.

Dla bardzo prostego zobrazowania, spójrz na następujący kod:

1
2
3
throw Error('Operation error.');
console.log('After error.');
console.log('Another message after error.');

Wykonanie tego kodu, generuje poniższy rezultat w konsoli, a po jego wyświetleniu przerywa wykonywanie dalszych instrukcji:

throw new Error('Operation error.');
^

Error: Operation error.
    at Object.<anonymous> (/nodestart-code/errors/new-error.js:1:7)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47

Kod od linii nr 2 się nie wykona, zostanie ona całkowicie zignorowany. Dzieje się tak, ze względu na pominięcie bloków, które umożliwiają nam kontrolę przepływu.

try, catch, finally, throw

try, catch, finally to instrukcje dzięki, którym można obsłużyć występujące wyjątki bez zatrzymywania działania skryptu.

  • try - The try statement defines the code block to run (to try).
  • catch - The catch statement defines a code block to handle any error.

The finally statement defines a code block to run regardless of the result.

The throw statement defines a custom error.

Both catch and finally are optional, but you must use one of them.

Podstawy wyjątków

TODO

Różnica pomiędzy throw new Error, a throw Error

TODO

https://stackoverflow.com/questions/9156176/what-is-the-difference-between-throw-new-error-and-throw-someobject

Przekazywanie przyczyny wyjątku

TODO

Errors can now be optionally constructed with a cause option, pointing to another error. This adds a cause property on the new error

https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V16.md#2021-09-07-version-1690-current-targos

https://medium.com/ovrsea/power-up-your-node-js-debugging-and-error-handling-with-the-new-error-cause-feature-4136c563126a