自己实现一个async函数
async函数能将promise链式调用的写法改成同步的写法。让代码变得更简洁易懂。es6中的async是语法糖,我们自己可以实现类似async函数的功能。
下面是myAsync
的代码:
/**
*
* @param {Function} gen 一个generator函数
*/
function myAsync(gen) {
var args = [].slice.call(arguments, 1), it;
it = gen.apply(this, args);
function fn(nextVal) {
if (!nextVal.done) {
return Promise.resolve(nextVal.value).then(
function (v) {
return fn(it.next(v));
},
function (err) {
return fn(it.throw(err));
}
)
} else {
return Promise.resolve(nextVal.value)
};
}
return