no need for optional callback in async() now that there is fn()