Distributed Systems with Node.js: bit.ly/34SHToF
Phase 1
: CallbacksPhase 2
: PromisesPhase 3
: Generators/YieldPhase 4
: Async/Awaitlet result = sendMessage('tlhunter', 'hi')
console.log(result)
function sendMessage(userId, message) {
let user = getUser(userId)
let able = canSend(user)
if (!able) return false
return writeMessage(user, message)
}
try {
var result = sendMessage('tlhunter', 'hi')
} catch (err) {
return console.error(err)
}
console.log(result)
function sendMessage(userId, message) {
throw new Error('Bad Stuff')
}
sendMessage('tlhunter', 'hi', ⏰(err, result) => {
console.log(result)
})
function sendMessage(userId, message, cb) {
getUser(userId, ⏰(err, user) => {
canSend(user, ⏰(err, able) => {
if (!able) { cb(null, false); return }
writeMessage(user, message, cb)
})
})
}
sendMessage('tlhunter', 'hi', ⏰(err, result) => {
if (err) {
return console.error(err)
}
console.log(result)
})
function sendMessage(userId, message, cb) {
setImmediate(⏰() => cb(new Error('Bad Stuff')))
}
function sendMessage(userId, message, cb) {
getUser(userId, ⏰(err, user) => {
if (err) { cb(err); return } // error check
canSend(user, ⏰(err, able) => {
if (err) { cb(err); return } // error check
if (!able) { cb(null, false); return }
writeMessage(user, message, cb)
})
})
}
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
})
function sendMessage(userId, message) {
return getUser(userId).then(⏰(user) => {
return canSend(user)
}).then(⏰(able) => {
if (!able) return false
return writeMessage(user, message)
})
}
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
}).catch(⏰(err) => {
console.error(err)
})
function sendMessage(userId, message) {
return Promise.reject(new Error('Bad Stuff'))
}
let gen = sendMessage('tlhunter', 'hi')
gen.next().value.then(⏰(user) => {
return gen.next(user).value.then(⏰(able) => {
return gen.next(able).value.then(⏰(result) => {
console.log(result)
})
})
})
function * sendMessage(userId, message) {
let user = ⏰yield getUser(userId)
let able = ⏰yield canSend(user)
if (!able) return false
return writeMessage(user, message)
}
const co = require('co')
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
})
function sendMessage(userId, message) {
return co(function * sendMessageGen() {
let user = ⏰yield getUser(userId)
let able = ⏰yield canSend(user)
if (!able) return false
return writeMessage(user, message)
})
}
const co = require('co')
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
}).catch(⏰(err) => {
console.error(err)
})
function sendMessage(userId, message) {
return co(function * sendMessageGen() {
⏰yield Promise.reject(new Error('Bad Stuff'))
})
}
(async () => {
let result = ⏰await sendMessage('tlhunter', 'hi')
console.log(result)
})()
async function sendMessage(userId, message) {
let user = ⏰await getUser(userId)
let able = ⏰await canSend(user)
if (!able) return false
return writeMessage(user, message)
}
(async () => {
try {
var result = ⏰await sendMessage('tlh', 'hi')
} catch(err) {
return console.error(err)
}
console.log(result)
})()
async function sendMessage(userId, message) {
throw new Error('Bad Stuff')
}
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
})
async function sendMessage(userId, message) {
let user = ⏰await getUser(userId)
let able = ⏰await canSend(user)
if (!able) return false
return writeMessage(user, message)
}
sendMessage('tlhunter', 'hi').then(⏰(result) => {
console.log(result)
}).catch(⏰(err) => {
console.error(err)
})
async function sendMessage(userId, message) {
throw new Error('Bad Stuff')
}
(async () => {
let result = ⏰await sendMessage('tlhunter', 'hi')
console.log(result)
})()
function sendMessage(userId, message) {
return getUser(userId).then(⏰(user) => {
return canSend(user)
}).then(⏰(able) => {
if (!able) return false
return writeMessage(user, message)
})
}
(async () => {
try {
var result = ⏰await sendMessage('tlh', 'hi')
} catch(err) {
return console.error(err)
}
console.log(result)
})()
function sendMessage(userId, message) {
return Promise.reject(new Error('Bad Stuff'))
}
const util = require('util')
const pifall = require('pifall')
const fs = require('fs')
const readFile = util.promisify(fs.readFile)
pifall(fs)
// Can you spot the anti-pattern?
;(async () => {
let stuff = ⏰await readFile('stuff.txt')
let data = ⏰await fs.readFileAsync('data.txt')
console.log(`${stuff}, ${data}`)
})()
const util = require('util')
const pifall = require('pifall')
const fs = require('fs')
const readFile = util.promisify(fs.readFile)
pifall(fs)
;(async () => {
let [stuff, data] = ⏰await Promise.all([
readFile('stuff.txt'),
fs.readFileAsync('data.txt')
]);
console.log(`${stuff}, ${data}`)
})()
bit.ly/34SHToF