"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Aprendiendo Node.js en días con IA - Día 4

Aprendiendo Node.js en días con IA - Día 4

Publicado el 2024-11-05
Navegar:724

Learning Node.js in Days with AI - Day 4

Hoy continué aprendiendo Node.js con la ayuda de ChatGPT y nos centramos en la programación asincrónica. Este es uno de los conceptos más importantes de Node.js y estoy emocionado de haber comenzado a dominarlo.

Teoría

En Node.js, la programación asincrónica es crucial debido a su arquitectura sin bloqueo basada en eventos. Esto significa que operaciones como lectura de archivos, consultas de bases de datos o solicitudes de red no bloquean la ejecución de otro código mientras se espera un resultado.

Exploramos tres formas principales de manejar operaciones asincrónicas:

  1. Devoluciones de llamada: Funciones pasadas como argumentos a otras funciones, que se ejecutan una vez que se completa una operación asincrónica.

    const fs = require('fs');
    
    fs.readFile('example.txt', 'utf8', (err, data) => {
        if (err) {
            console.error(err);
            return;
        }
        console.log(data);
    });
    
  2. Promesas: Objetos que representan la eventual finalización (o falla) de una operación asincrónica y su valor resultante. Las promesas permiten el encadenamiento y hacen que el código sea más legible en comparación con las devoluciones de llamada anidadas.

    const fs = require('fs').promises;
    
    fs.readFile('example.txt', 'utf8')
        .then(data => {
            console.log(data);
        })
        .catch(err => {
            console.error(err);
        });
    
  3. Async/Await: Azúcar sintáctico construido sobre Promises que permite escribir código asincrónico de manera sincrónica.

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

Tarea práctica

Hoy practiqué la conversión de una función basada en devolución de llamada en una función basada en promesas.

Código original con devoluciones de llamada:

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

Conversión a Promesas:

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

Tarea independiente

También escribí una función asincrónica usando async/await que lee el contenido de un archivo y lo registra en la consola. Si se produce un error (por ejemplo, archivo no encontrado), debería detectar el error y registrarlo.

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 las lecciones creadas por ChatGPT se pueden encontrar en: https://king-tri-ton.github.io/learn-nodejs

Declaración de liberación Este artículo se reproduce en: https://dev.to/king_triton/learning-nodejs-in-30-days-with-ai-day-4-3o69?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3