call callback inside `setTImeout` here, because the other call is asynchronous so this one must be asynchronous too.