Estoy reanudando los estudios de javascript ahora y me encontré con un problema. Tengo una clase Customer que recibe datos de clientes en el constructor y los valida antes de asignarlos a sus respectivas propiedades. Cuando el número de teléfono es incorrecto, se lanza una excepción que a su vez debe detener la ejecución de todo el programa, sin embargo, ese es el problema. Estoy lanzando la excepción y tratándola con try/catch pero el programa continúa de todos modos, aquí está el código:
// Customer class import { Library } from './Library.js'; import { books } from './books.js'; import chalk from 'chalk'; export class Customer { #name; #birthdate; #email; #phone; #code; constructor(name, birthdate, email, phone) { this.#name = name; this.#birthdate = birthdate; this.#email = email; this.#phone = this.#validatePhone(phone); this.rented = []; this.#code = Math.trunc(Math.random() * 99999); // MUST BE READABLE, ONLY! } get name() { return this.#name; } get birthdate() { return this.#birthdate; } get email() { return this.#email; } get phone() { return this.#phone; } set name(name) { this.#name = name; } set birthdate(birthdate) { this.#birthdate = birthdate; } set email(email) { this.#email = email; } set phone(phone) { this.#phone = phone; } async rentBoook(title, days) { const search = await Library.searchBook(title); if(search.length === 0) throw 'This book doesn\'t exist!'; return await Library.rentBook('O Ar', this, days); } #validatePhone(phone) { try { const pattern = /(\(?[0-9]{2}\)?)\s?([0-9]{5})-?([0-9]{4})/; if(!pattern.test(phone)) throw 'Invalid phone number!'; return phone; }catch(err) { console.log(chalk.red(err)); } } } // Index import chalk from 'chalk'; import { Customer } from './Customer.js'; const customer = new Customer('John Doe', '20-04-04', 'r@r.com', '(99) 9999-99999'); customer.rentBoook('O Ar', 7) .then(r => console.log(chalk.green('Book rented with success!'))) .catch(err => console.log(chalk.red(err))); // Output "Invalid phone number!" "Book rented with success!"La validación del teléfono debe manejarse en el método rentBook , ya que la validación no se manejó dentro del rentBook y sucedió para la asignación de accesorios #phone (#phone se volverá indefinido ), ambos métodos se ejecutan independientemente uno del otro.
Para este caso, obtendrá el resultado esperado, cuando la validación se realice dentro de rentBook antes de Library.search
async rentBoook(title, days) { .... validatePhone() ... }elimine try catch en el método de validación de teléfono y use try..catch en rentBook si es necesario
Espero que esto ayude