SOURCE

console 命令行工具 X clear

                    
>
console
var promise1 = () => new Promise((resolve, reject) => {
	return setTimeout(function(){resolve('promise1')},3000)
})

var promise2 = () => new Promise((resolve, reject) => {
	return setTimeout(function(){resolve('promise2')},3000)
})

function* gen(){
	const data1 = yield promise1()
	console.log(data1)
	const data2 = yield promise2()
	console.log(data2)
}

function newAsync(func){
	return function(){
		const gen = func.apply(this,arguments)
		return new Promise((resolve, reject) => {
			function step(next, arg){
				const result = gen[next](arg)
				const { value,done } = result
				if(done){
					return resolve(value)
				} else {
					return Promise.resolve(value).then(val => step('next', val))
				}
			}
			step('next')
		})
	}
}

var a = newAsync(gen)
async await 手写实现