DanceJS 💃 is alternative pattern to handle flow of function, by main concept is what happen next.
This pattern also aim to make your JS code is easy to read and organize your mind for coding.
include dance.js in your code
<script src="dance.js">then let rooooll!!! 🎤 🎶
var dance = new Dance
// Define notation name "Gangnam_style"
// and set step "Cross_hands", "Raise_left_leg", "Raise_right_leg" and "End"
dance.step('Gangnam_style', {
'Cross_hands': (next) => {
...
next('Raise_left_leg')
},
'Raise_left_leg': (next, data) => {
...
next('Raise_right_leg', {
foo: bar
})
},
'Raise_right_leg': (next, data) => {
...
next('End')
},
'End': (next) => {
next('Cross_hands')
}
})
// Dont forgot to call .letRoll
// First step that defined will run at first, in this case "Cross_hands" will run.
dance.letRoll('Gangnam_style')
// IF we need to specify which step will run first jusf add second parameter of letRoll()
dance.letRoll('Gangnam_style', 'Raise_left_leg')Making function to load user and process user data
dance.step('Get_user', {
'Fetch_from_API': (next) => {
request.get('http://user.api/users')
.then(res => {
next('Filter', res.users)
})
.catch(() => {
next('Display_not_found')
})
},
'Filter': (next, data) => {
let userWhoIsActive = data.filter(user => {
return user.is_active
})
next('Display_to_list', userWhoIsActive)
},
'Display_to_list': (next, data) => {
document.getElementById('ul').innerHTML = data.map(user => `<li>${user.name}</li>`)
next('Push_notify_when_success')
},
'Display_not_found': () => {
document.getElementById('output').innerText = 'Sorry, user not found'
}
})
// We can push extra step by define same notation name,
// then new step will push to previous defined notation
dance.step('Get_user', {
'Push_notify_when_success': () => {
alert('Done')
}
})
// Dont forgot to call .letRoll
dance.letRoll('Get_user')see more example, at /demo