function asyncGeneratorStep ( gen , resolve , reject , _next , _throw , 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 ) ; } } function _asyncToGenerator ( fn ) { return function ( ) { var self = this , args = arguments ; return new Promise ( function ( resolve , reject ) { var gen = fn . apply ( self , args ) ; function _next ( value ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , 'next' , value ) ; } function _throw ( err ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , 'throw' , err ) ; } _next ( undefined ) ; } ) ; } ; } const asyncFunc = _asyncToGenerator ( function * ( ) { console . log ( 1 ) ; yield new Promise ( resolve => { setTimeout ( ( ) => { resolve ( ) ; console . log ( 'sleep 1s' ) ; } , 1000 ) ; } ) ; console . log ( 2 ) ; const a = yield Promise . resolve ( 'a' ) ; const d = yield 'd' ; console . log ( 3 ) ; const b = yield Promise . resolve ( 'b' ) ; const c = yield Promise . resolve ( 'c' ) ; return [ a , b , c , d ] ; } ) ; asyncFunc ( ) . then ( res => { console . log ( res ) ; } ) ;