rewrite router async logic

same here, need to return