关于调用JavaScript async函数时是否需额外添加await的技术问询
Async函数调用时的await使用问题
1. 无返回值的async函数调用
先看定义的logout函数:
async logout() { await this.page.click('#logout'); }
调用时写await new LogoutPage(driver).logout()是必须加await的。
原因很直接:所有async函数的返回值都是Promise,哪怕函数内部没有显式返回值。如果不加await,代码不会等待logout里的登出点击操作完成就继续往下执行,很容易导致后续逻辑和登出操作的时序混乱(比如还没完成登出就执行下一个需要已登出状态的操作)。加await就是为了确保这个异步操作彻底完成后,再推进后续代码。
2. 返回await结果的async函数调用
再看这个返回布尔值的async函数:
async LoggedOut(): Promise<boolean> { return await isVisible('#logged_out_logo'); }
调用这个函数时同样需要加await。
因为async函数的返回值会被自动包装成Promise,哪怕内部用了return await,直接调用拿到的还是Promise对象,不是真正的布尔值。比如你写const isLoggedOut = new LogoutPage(driver).LoggedOut(),isLoggedOut其实是个Promise,必须加await才能获取到实际的true/false结果,否则没法直接用这个值做判断逻辑。
内容的提问来源于stack exchange,提问作者msmith1114
相关产品推荐
相关产品推荐

