├── README.md ├── Node-modules ├── modules-example │ ├── response.js │ ├── request.js │ └── https.js └── http-example.js └── Events └── event.js /README.md: -------------------------------------------------------------------------------- 1 | The main advantage to using setImmediate() over setTimeout() is setImmediate() will always be executed before any timers if scheduled within an I/O cycle, independently of how many timers are present. -------------------------------------------------------------------------------- /Node-modules/modules-example/response.js: -------------------------------------------------------------------------------- 1 | function decrypt(data) { 2 | return 'decrypted data' 3 | } 4 | 5 | function read() { 6 | return decrypt('data') 7 | } 8 | 9 | module.exports = { 10 | read, 11 | } -------------------------------------------------------------------------------- /Node-modules/modules-example/request.js: -------------------------------------------------------------------------------- 1 | function encrypt(data) { 2 | return 'encrypted data'; 3 | } 4 | 5 | function send(url, data) { 6 | const encryptedData = encrypt(data); 7 | console.log(`sending ${encryptedData} to ${url}`) 8 | } 9 | 10 | module.exports = { 11 | send, 12 | } -------------------------------------------------------------------------------- /Node-modules/http-example.js: -------------------------------------------------------------------------------- 1 | // example 1 2 | 3 | const {get}= require('https'); 4 | 5 | get('https://www.google.com', (res) => { 6 | res.on('data', (chunk) => { 7 | console.log(`Data chunk: ${chunk}`) 8 | }); 9 | res.on('end', () => { 10 | console.log('No more data') 11 | }); 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /Node-modules/modules-example/https.js: -------------------------------------------------------------------------------- 1 | const request = require('./request') 2 | const response = require('./response') 3 | 4 | function makeRequest(url, data) { 5 | request.send(url, data) 6 | return response.read() 7 | } 8 | 9 | const responseData = makeRequest('https//google.com','hello') 10 | console.log(responseData) -------------------------------------------------------------------------------- /Events/event.js: -------------------------------------------------------------------------------- 1 | 2 | setTimeout(() => { 3 | console.log("outTime") 4 | }, 0); 5 | 6 | setImmediate(() => { 7 | console.log("hello") 8 | }) 9 | 10 | // timeout_vs_immediate.js 11 | const fs = require('node:fs'); 12 | 13 | fs.readFile(__filename, () => { 14 | setTimeout(() => { 15 | console.log('timeout'); 16 | }, 0); 17 | setImmediate(() => { 18 | console.log('immediate'); 19 | }); 20 | }); 21 | 22 | 23 | // const server = net.createServer(); 24 | // server.on('connection', conn => {}); 25 | 26 | // server.listen(8080); 27 | // server.on('listening', () => {}); 28 | 29 | // const EventEmitter = require('node:events'); 30 | 31 | // class MyEmitter extends EventEmitter { 32 | // constructor() { 33 | // super(); 34 | 35 | // // use nextTick to emit the event once a handler is assigned 36 | // process.nextTick(() => { 37 | // this.emit('event'); 38 | // }); 39 | // } 40 | // } 41 | 42 | // const myEmitter = new MyEmitter(); 43 | // myEmitter.on('event', () => { 44 | // console.log('an event occurred!'); 45 | // }); 46 | 47 | 48 | // const EventEmitter = require('node:events'); 49 | 50 | // class MyEmitter extends EventEmitter {} 51 | 52 | // const myEmitter = new MyEmitter(); 53 | // myEmitter.on('event', () => { 54 | // console.log('an event occurred!'); 55 | // }); 56 | // myEmitter.emit('event'); 57 | 58 | // Passing arguments and this to listeners 59 | // const EventEmitter = require('node:events'); 60 | // class MyEmitter extends EventEmitter {} 61 | // const myEmitter = new MyEmitter(); 62 | // myEmitter.on('event', (a, b) => { 63 | // console.log(a, b, this); 64 | // // Prints: a b {} 65 | // }); 66 | // myEmitter.emit('event', 'a', 'b'); 67 | 68 | // Asynchronous vs. synchronous 69 | 70 | // const EventEmitter = require('node:events'); 71 | // class MyEmitter extends EventEmitter {} 72 | // const myEmitter = new MyEmitter(); 73 | // myEmitter.on('event', (a, b) => { 74 | // setImmediate(() => { 75 | // console.log('this happens asynchronously'); 76 | // }); 77 | // }); 78 | // myEmitter.emit('event', 'a', 'b'); 79 | 80 | // Handling events only once 81 | // const EventEmitter = require('node:events'); 82 | // class MyEmitter extends EventEmitter { } 83 | // const myEmitter = new MyEmitter(); 84 | // let m = 0; 85 | // myEmitter.on('event', () => { 86 | // console.log(++m); 87 | // }); 88 | // myEmitter.emit('event'); 89 | // // Prints: 1 90 | // myEmitter.emit('event'); 91 | // // Prints: 2 92 | 93 | const EventEmitter = require('events'); 94 | const celebrity = new EventEmitter(); 95 | 96 | celebrity.on('race', (results) => { 97 | if (results === 'win') { 98 | console.log('Congrats'); 99 | } 100 | }); 101 | 102 | celebrity.on('race', (results) => { 103 | if (results === 'win') { 104 | console.log('Boo! I could have done better than that!'); 105 | } 106 | 107 | }); 108 | 109 | celebrity.on('race', (results) => { 110 | if (results === 'lost') { 111 | console.log("oops you lost") 112 | } 113 | }) 114 | 115 | process.on('exit', (code) => { 116 | console.log('Process exit event with code:', code); 117 | }); 118 | 119 | 120 | celebrity.emit('race', 'win'); 121 | celebrity.emit('race', 'lost'); --------------------------------------------------------------------------------