Muy teso pa' explicar!!! en una sola clase entendí lo que no pude en un mes!, Mounstro!!!!
Investigando un poco y respondiéndome a mi pregunta jeje 😄, según la versión de Node.js v12.11.1 estos son los módulos nativos que vienen por default:
Assertion Testing
Async Hooks
Buffer
C++ Addons
C/C++ Addons - N-API
Child Processes
Cluster
Command Line Options
Console
Crypto
Debugger
Deprecated APIs
DNS
Domain
ECMAScript Modules
Errors
Events
File System
Globals
HTTP
HTTP/2
HTTPS
Inspector
Internationalization
Modules
Net
OS
Path
Performance Hooks
Policies
Process
Punycode
Query Strings
Readline
REPL
Report
Stream
String Decoder
Timers
TLS/SSL
Trace Events
TTY
UDP/Datagram
URL
Utilities
V8
VM
Worker Threads
Zlib
muchas gracias por tu aporte y tomarte el tiempo en investigar
Muy buen aporte, gracias
Apuntes de la clase espero les sirvan:
Muy bien explicado, gracias.
En windows para dar formato al código es alt + shift + f
Gracias
Una arquitectura orientada por eventos es un patron de diseño el cual permite a un conjunto de sistemas comunicarse entre si de forma reactiva mediante la publicacion y el consumo de eventos, los cuales se pueden interpretar como cambios de estado de objetos
Damas y caballeros se va poniendo dificil la cuestión
Cualquier duda, por aca estoy. :)
Guau! Gracias profe, cualquier cosa concreta le digo. Ahora ando con el desafío del miniservidor con el cumpleaños.
Un experimento enviando código asíncrono dentro del callback.
Para que se mantenga el orden se deben usar callbacks, promesas o como en este caso async-await
constEventEmmiter=require('events')classLoggerextendsEventEmmiter{execute(cb){(async()=>{console.log('Before')this.emit('start')try{const res =awaitcb()console.log(res)}catch(e){console.log(e)}this.emit('finish')console.log('After')})()}}const logger =newLogger()logger.on('start',()=>console.log('Starting'))logger.on('finish',()=>console.log('Finishing'))logger.on('finish',()=>console.log('It\'s Done!'))logger.execute(()=>newPromise((resolve, reject)=>{setTimeout(()=>{if(Math.random()<0.5){resolve('Hello world!')}else{reject(newError('Hello error!'))}},2000)}))
Hola, en lugar de una función auto ejecutada para el async-await creo que es mejor ponerlo así:
Con async-await no es necesario que se envuelva la promesa dentro de una función.
Se puede dejar igual a como se estaba manejando con .then y .catch y asignar el resultado a la nueva variable usando el async
A mí me funciona así
El start y finish a los que te refieres son los this.emit.
No es necesario ejecutar el comando para formatearlo el código siempre. En VsCode puedes abrir el archivo de configuración y agregar la siguiente línea:
"editor.formatOnSave":true
en windows, para formatear el documento shft+alt+f
Para que les salga la paleta de comando que usa el profesor en el minuto 2.38 en mac deben de pulsar -> cmd + shift + p
Es arquitectura orientada a eventos o paradigma orientado a eventos ? saludos
Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds of objects (called "emitters") emit named events that cause Function objects ("listeners") to be called.
Para mantener el orden con event-emitter ¿Es necesario combinarlo con promesas o async-await?
Si realmente necesita el orden, sería coherente que funcione con async/await
Porque no ejecuta los eventos start y finish cuando coloco una callback asincrono antes de que se suscriba una función a los eventos start o finish?
classLoggerextendsEventEmmiter{execute(cb){console.log('Before');this.emit('start');cb();this.emit('finish');console.log('After');}}// At the beginniglogger.execute(()=>setTimeout(()=>console.log('Hello human!'),1000));logger.on('start',()=>console.log('It´s Starting'));logger.on('finish',()=>console.log('It´s Done'));// Output// Before// After// Hello human!// At the endlogger.on('start',()=>console.log('It´s Starting'));logger.on('finish',()=>console.log('It´s Done'));logger.execute(()=>setTimeout(()=>console.log('Hello human!'),1000));// Output// Before// It´s Starting//It´s Done// After// Hello human!
Algunas librerías internas de node que extienden de EventEmitter son las librerías fs y process. Veamos unos ejemplos.
El módulo fs usa internamente EventEmitter, específicamente 'open', 'end' y 'data', respectivamente cuando se abre un archivo, cuando se termina de leer un archivo o cuando se está leyendo uno. Y este sería el output.
Started Reading...
Chunk: 1----------------------------------------------------------
<Buffer 4c 6f 7265 6d 2069707375 6d 2064 6f 6c 6f 72207369742061 6d 6574 2c 2063 6f 6e 7365637465747572206164697069736369 6e 67... >Chunk: 2----------------------------------------------------------
<Buffer 7420 6e 75 6e 6320766974616520666572 6d 65 6e 7475 6d 2e 2049 6e 2075742061726375207465 6d 70 6f 72 2c 2066617563696275... >Chunk: 3----------------------------------------------------------
<Buffer 207669746165 2c 2065676573746173206964207365 6d 2e 2044 6f 6e 65632075742075 6c 7472696369657320 6c 6f 7265 6d 2c 20... >Completed Reading...
Muy bueno la clase de EventEmitter! Este ejemplo lo conseguí de este link. Explica con claridad los conceptos y métodos de esta clase. Lo recomiendo!
ahora ya entiendo como trabaja SocketIO. emito un evento con información, escucho eventos y proceso la data.