functions loose this if directly thrown into async