Menu
CoddyTech

Async dan Await

Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 16 dari 24.

Rangkaian pemanggilan .then terbaca berbeda dari cara kamu memikirkan langkah-langkahnya: baca, lalu parse, lalu simpan.

Di dalam fungsi async, await menjeda eksekusi hingga promise selesai dan memberikan nilainya kepadamu. Promise yang gagal akan melempar error di sana, jadi try dan catch menanganinya. Di dalam module, await juga berfungsi di tingkat teratas.

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

const loadConfig = async () => {
    try {
        return JSON.parse(await readFile('config.json', 'utf8'));
    } catch {
        return {};
    }
};

const config = await loadConfig();
console.log(config.port ?? 3000);

Fungsi async selalu mengembalikan promise, jadi pemanggilnya juga harus menunggunya dengan await. Jika kamu lupa menambahkan await, kamu akan mendapatkan promise itu sendiri, Promise { <pending> }, bukan nilainya.

challenge icon

Tantangan

Mudah
  • store.js kini membaca dan menulis menggunakan node:fs/promises. Tambahkan await yang belum ada agar setiap perintah berfungsi seperti sebelumnya.
  • notes.js menunggu store.add dan store.remove, yang kini bersifat async.

Jalankan node notes.js list terlebih dahulu untuk membaca error, lalu jalankan add dan done 1 setelah semuanya berfungsi.

Coba sendiri

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

const file = 'notes.json';

// readFile dan writeFile sekarang mengembalikan promise. Tunggu masing-masing dengan await.
const load = async () => {
    if (!existsSync(file)) {
        return [];
    }
    try {
        return JSON.parse(readFile(file, 'utf8'));
    } catch (err) {
        console.error(`notes.json is damaged: ${err.message}`);
        process.exit(1);
    }
};

const store = {
    notes: load(),
    async save() {
        writeFile(file, JSON.stringify(this.notes, null, 2));
    },
    async add(text) {
        this.notes.push(text);
        this.save();
        return this.notes.length;
    },
    async remove(n) {
        const [text] = this.notes.splice(n - 1, 1);
        this.save();
        return text;
    },
};

export default store;
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Node.js

Latihan sendiri: Playground Express