function genertorToAsync (fn) {
return function () {
return new Promise((resolve, reject) => {
const gn = fn.call(this, arguments);
// 采用递归的方式调用next
function _next(value) {
const { value, done } = gn.next(value);
if (done) {
return resolve(value);
} else {
return Promise.resolve(value).then(() => {
_next(value);
}, (err) => {
reject(err);
})
}
}
_next();
});
}
}