use async to clean the code