引入async,使用async模块提供的功能重构代码,功能不变