db-vendo-client/test/lib/co.js

33 lines
717 B
JavaScript

'use strict'
// https://github.com/babel/babel/blob/3c8d831fe41f502cbe2459a271d19c7329ffe369/packages/babel-helpers/src/helpers.js#L242-L270
const co = (fn) => {
return function run () {
const self = this, args = arguments
return new Promise((resolve, reject) => {
const gen = fn.apply(self, args)
const step = (key, arg) => {
try {
var info = gen[key](arg)
var value = info.value
} catch (error) {
reject(error)
return
}
if (info.done) resolve(value)
else Promise.resolve(value).then(_next, _throw)
}
const _next = (value) => {
step('next', value)
}
const _throw = (err) => {
step('throw', err)
}
_next()
})
}
}
module.exports = co