"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Aprendendo Node.js em dias com IA – Dia 4

Aprendendo Node.js em dias com IA – Dia 4

Publicado em 2024-11-05
Navegar:148

Learning Node.js in Days with AI - Day 4

Hoje continuei aprendendo Node.js com a ajuda do ChatGPT e focamos na programação assíncrona. Este é um dos conceitos mais importantes do Node.js e estou animado por ter começado a dominá-lo.

Teoria

No Node.js, a programação assíncrona é crucial devido à sua arquitetura não bloqueante e orientada a eventos. Isso significa que operações como leitura de arquivos, consultas de banco de dados ou solicitações de rede não bloqueiam a execução de outro código enquanto aguardam um resultado.

Exploramos três maneiras principais de lidar com operações assíncronas:

  1. Callbacks: Funções passadas como argumentos para outras funções, que são executadas quando uma operação assíncrona é concluída.

    const fs = require('fs');
    
    fs.readFile('example.txt', 'utf8', (err, data) => {
        if (err) {
            console.error(err);
            return;
        }
        console.log(data);
    });
    
  2. Promessas: Objetos que representam a eventual conclusão (ou falha) de uma operação assíncrona e seu valor resultante. As promessas permitem o encadeamento e tornam o código mais legível em comparação com retornos de chamada aninhados.

    const fs = require('fs').promises;
    
    fs.readFile('example.txt', 'utf8')
        .then(data => {
            console.log(data);
        })
        .catch(err => {
            console.error(err);
        });
    
  3. Async/Await: Açúcar sintático construído sobre Promises que permite escrever código assíncrono de maneira síncrona.

    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();
    

Tarefa Prática

Hoje, pratiquei a conversão de uma função baseada em retorno de chamada em uma função baseada em promessa.

Código original com retornos de chamada:

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);
});

Conversão em promessas:

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);
    });

Tarefa independente

Também escrevi uma função assíncrona usando async/await que lê o conteúdo de um arquivo e o registra no console. Se ocorrer um erro (por exemplo, arquivo não encontrado), ele deverá capturar o erro e registrá-lo.

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');

Recursos

Todas as lições criadas pelo ChatGPT podem ser encontradas em: https://king-tri-ton.github.io/learn-nodejs

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/king_triton/learning-nodejs-in-30-days-with-ai-day-4-3o69?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3