Skip to content

Instantly share code, notes, and snippets.

@pratyushcrd
pratyushcrd / js
Created April 7, 2019 20:05
callback-hell
function buyBread (input, callback) {
gotoStore(input, (storeErr, storeResponse) => {
if (storeErr) {
return callback(Error('Store is unavailable'), null)
}
buyBrownBread(input, (brownBreadErr, brownBreadResponse) => {
// if unable to buy brown bread, buy white bread
if (brownBreadErr) {
buyWhiteBread(input, (whiteBreadErr, whiteBreadResponse) => {
if (whiteBreadErr) {
@pratyushcrd
pratyushcrd / callback-hell-example.js
Last active April 8, 2019 21:39
An example to show nested callback's complexity
function buyBread (input, callback) {
gotoStore(input, (storeErr, storeResponse) => {
if (storeErr) {
return callback(storeErr, null)
}
buyBrownBread(input, (brownBreadErr, brownBreadResponse) => {
if (brownBreadErr) {
buyWhiteBread(input, (whiteBreadErr, whiteBreadResponse) => {
if (whiteBreadErr) {
return callback(whiteBreadErr, null)
function showFavouriteArticles () {
getUser()
.then(user => getFavouriteArticles(user))
.then(articles => showArticles(articles))
.catch(err => notifyError(err))
}
function buyBread (input) {
return gotoStore(input)
.then(() => {
return buyBrownBread(input)
.catch(() => buyWhiteBread(input))
})
}
function readFile(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
if (err) {
return reject(err)
}
return resolve(data)
})
})
}
module.exports = {
/**
* Function to verify all validations
* @param {...any} paramsRaw An array of validation results,
* Values can either be `true` or `error string`.
*/
all: async function (...paramsRaw) {
const params = await Promise.all(paramsRaw)
const error = params
.filter(val => typeof val === 'string')[0]