Skip to content

Instantly share code, notes, and snippets.

@hpstuff
Created November 22, 2015 21:16
Show Gist options
  • Select an option

  • Save hpstuff/31ce30088762dec8bc44 to your computer and use it in GitHub Desktop.

Select an option

Save hpstuff/31ce30088762dec8bc44 to your computer and use it in GitHub Desktop.
async+await+yield
var generator = publishLevel(12, {data: true})
load.call(generator)
function* publishLevel(user_id, level_data) {
var user = yield getUser(user_id)
console.log(user)
var can_create = yield canCreate(user)
console.log(can_create)
if (!can_create) {
return
}
var level = yield saveLevel(user, level_data)
console.log(level)
}
function getUser(user_id) {
return new Promise(resolve => {
setTimeout(() => {
resolve({
id: user_id,
nickname: 'tlhunter'
})
}, 2000)
})
}
function canCreate(user) {
return new Promise(resolve => {
setTimeout(() => {
resolve(user.id === 12)
}, 1000)
})
}
function saveLevel(user, data) {
return new Promise(resolve => {
setTimeout(() => {
resolve({
id: 100,
owner: user.nickname,
data: data
});
}, 1000)
})
}
function load(value){
let iterator = this.next(value)
if (!iterator.done) {
iterator.value.then(result => {
load.call(this, result)
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment