Menu
CoddyTech

Promises

Część sekcji Podstawy Node.js ścieżki Node.js w Coddy. Lekcja 15 z 24.

Callbacki zagnieżdżone w innych callbackach trudno śledzić, a każdy z nich musi pamiętać o sprawdzeniu err.

node:fs/promises zwraca zamiast tego obietnicę: obiekt reprezentujący wynik, który pojawi się później. .then(fn) uruchamia się z wynikiem, .catch(fn) uruchamia się, jeśli którykolwiek wcześniejszy krok się nie powiedzie, a .finally(fn) uruchamia się w obu przypadkach.

import { readFile } from 'node:fs/promises';

readFile('poem.txt', 'utf8')
    .then((text) => console.log(text.length + ' characters'))
    .catch(() => console.log('No poem today'))
    .finally(() => console.log('Bye'));

Błąd rzucony wewnątrz .then również trafia do .catch, więc jeden moduł obsługi obejmuje zarówno odczyt, jak i analizowanie. Obietnica, która zakończy się błędem bez .catch, powoduje awarię programu.

challenge icon

Wyzwanie

Łatwy
  • Przepisz plik count.js, używając readFile z node:fs/promises oraz .then.
  • Brakujący plik powoduje teraz wyświetlenie komunikatu No notes yet z .catch.
  • Done nadal pojawia się na końcu dzięki .finally.

Uruchom node count.js, a następnie node count.js nothere.json.

Spróbuj swoich sił

import fs from 'node:fs';

const file = process.argv[2] ?? 'notes.json';

console.log('Reading...');
fs.readFile(file, 'utf8', (err, text) => {
    if (err) {
        console.log(`Cannot read ${file}`);
    } else {
        console.log(`${JSON.parse(text).length} notes`);
    }
    console.log('Done');
});

Wszystkie lekcje w sekcji Podstawy Node.js