for async functions or setTimeout functions, we may need to use `done`.