Skip to content

Instantly share code, notes, and snippets.

@daniellizik
Created August 7, 2017 16:49
Show Gist options
  • Save daniellizik/a9652988c53771f59eb233d41759293a to your computer and use it in GitHub Desktop.
Save daniellizik/a9652988c53771f59eb233d41759293a to your computer and use it in GitHub Desktop.
wapo
const lib = {
findUser: () => new Promise((resolve, reject) => {
setTimeout(() => {
resolve({name: 'ricky', content: 'z-z'})
}, 1)
}),
getUsers: (users = []) => new Promise((resolve, reject) => {
setTimeout(() => {
resolve([
...users,
{name: 'bob', content: 'a-b'},
{name: 'jason', content: '1-2'}
])
}, 400)
}),
mapIdsToUsers: (users = []) => new Promise((resolve, reject) => {
setTimeout(() => {
if (users.length < 1) {
reject()
} else {
const mappedIds = users.map((user, i) => Object.assign({}, user, {index: i}))
resolve(mappedIds)
}
}, 400)
}),
reduceUserContent: (users = []) => new Promise((resolve, reject) => {
setTimeout(() => {
if (users.length < 1) {
reject()
} else {
const cleanedData = users.reduce((acc, {content}) => {
return [...acc, ...content.split('-')]
}, [])
resolve(cleanedData)
}
}, 400)
})
}
let users = []
let err
function solution() {
lib.findUser().then((user) => {
users.push(user)
})
return new Promise((resolve, reject) => {
lib.getUsers(users).then(res => {
users = res
lib.mapIdsToUsers(res).then(res => {
users = res
lib.reduceUserContent(users).then(res => {
resolve(res)
}).catch(reject)
}).catch(reject)
}).catch(reject)
})
}
solution().then(r => {
// r will be [z, z, a, b, 1, 2]
// we can modify the problem to return something "less intuitive"
// since we never want to write code like this...
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment