2.0.2 • Published 8 years ago
cool-stringifier v2.0.2
Class 04 Node Architecture, Asynchronous, Events
Questions and Feedback
- file system command are relative to
cwd(pwd)- not the same as
requirewhich is relative to the file in which it appears
- not the same as
mocha -whangs on some errorsnodemon
- ?
Learning Objectives
- Have a working model of asynchronous programming in NodeJS
- Utilize events and event emitters
Agenda
Node.JS Architecture
- What is it?
- Node Event Loop
- Basic node architecture 101
- v8 + event-loop + os-lib
- Thread - actual "thread of execution"
- Event loop explained
- JavaScript single threaded event model
- Demo:
event-loop.js
Event Emitter pattern
- Subscribe and use an event emitter
- Streams
- as event emitters:
on:dataandclose
write
- as event emitters:
- Files as streams
- Demo fs.createReadStream()
Managing asynchronicity
- Some hard rules:
- You can't create asynchronicity with just js
- If your building functionality on top of asynchronous APIs, then your library must be asynchronous!
- If a function or method uses asynchronous activity to complete its work, then that function must have an asynchronous interface (returns a promise)!
- Wrapping with promises
require('util').promisifyfor node callbacksnew Promise((resolve, reject) => { /*...*/ })
- Demo:
- Evolve
CoolStringifier- "static" methods
Mochatest parameter Tests function.length if > 0, test is async, calling done with any non-null argument is failure (matches node callback signature)done
- "static" methods
- return a promise!
- Evolve
Use nodemon to run mocha in watch mode
- Demo:
package.json