async module loader with promise