«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Изучение Node.js за несколько дней с ИИ — день 4

Изучение Node.js за несколько дней с ИИ — день 4

Опубликовано 5 ноября 2024 г.
Просматривать:905

Learning Node.js in Days with AI - Day 4

Сегодня я продолжил изучение Node.js с помощью ChatGPT, и мы сосредоточились на асинхронном программировании. Это одна из самых важных концепций Node.js, и я очень рад, что начал ее осваивать.

Теория

В Node.js асинхронное программирование имеет решающее значение из-за его неблокирующей, управляемой событиями архитектуры. Это означает, что такие операции, как чтение файлов, запросы к базе данных или сетевые запросы, не блокируют выполнение другого кода во время ожидания результата.

Мы исследовали три основных способа обработки асинхронных операций:

  1. Обратные вызовы: Функции, передаваемые в качестве аргументов другим функциям, которые выполняются после завершения асинхронной операции.

    const fs = require('fs');
    
    fs.readFile('example.txt', 'utf8', (err, data) => {
        if (err) {
            console.error(err);
            return;
        }
        console.log(data);
    });
    
  2. Обещания: Объекты, представляющие возможное завершение (или сбой) асинхронной операции и ее результирующее значение. Промисы позволяют создавать цепочки и делают код более читабельным по сравнению с вложенными обратными вызовами.

    const fs = require('fs').promises;
    
    fs.readFile('example.txt', 'utf8')
        .then(data => {
            console.log(data);
        })
        .catch(err => {
            console.error(err);
        });
    
  3. Async/Await: Синтаксический сахар, созданный на основе промисов, который позволяет писать асинхронный код синхронно.

    const fs = require('fs').promises;
    
    async function readFile() {
        try {
            const data = await fs.readFile('example.txt', 'utf8');
            console.log(data);
        } catch (err) {
            console.error(err);
        }
    }
    
    readFile();
    

Практическое задание

Сегодня я попрактиковался в преобразовании функции, основанной на обратном вызове, в функцию, основанную на обещаниях.

Исходный код с обратными вызовами:

const fs = require('fs');

function readFileCallback(path, callback) {
    fs.readFile(path, 'utf8', (err, data) => {
        if (err) {
            callback(err);
            return;
        }
        callback(null, data);
    });
}

readFileCallback('example.txt', (err, data) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(data);
});

Преобразование в обещания:

const fs = require('fs').promises;

function readFilePromise(path) {
    return fs.readFile(path, 'utf8');
}

readFilePromise('example.txt')
    .then(data => {
        console.log(data);
    })
    .catch(err => {
        console.error(err);
    });

Независимая задача

Я также написал асинхронную функцию, используя async/await, которая считывает содержимое файла и записывает его в консоль. Если возникает ошибка (например, файл не найден), он должен отловить ошибку и зарегистрировать ее.

const fs = require('fs').promises;

async function readFileAsync(path) {
    try {
        const data = await fs.readFile(path, 'utf8');
        console.log(data);
    } catch (err) {
        console.error(err);
    }
}

readFileAsync('example.txt');

Ресурсы

Все уроки, созданные ChatGPT, можно найти по адресу: https://king-tri-ton.github.io/learn-nodejs

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/king_triton/learning-nodejs-in-30-days-with-ai-day-4-3o69?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3