我在 Playwright(一个自动化测试库)中遇到了一个奇怪的问题,我的页面对象类中有一个像这样的基本函数:
async open() {
await super.open("some/url/here");
}
(基类基本上只是一个:
async open(path: string) {
await this.page.goto(path);
}
话虽如此,我错误地只是打电话给
someInstance.open()
而不是await someInstance.open()
添加
await
确实解决了我遇到的问题。然而,这让我怀疑如果我在函数中的唯一命令上已经有了 await
,我是否真的需要在测试中使用 await
?
那么两个地方都需要
await
吗?
谢谢!
是的,两个地方都需要。
open
需要等待goto()
完成,调用者需要等待open()
完成。否则,这将是一个“即发即忘”的调用:无论您省略哪个 await
,open
的调用者都将不再等待 goto()
完成。但是,您可以将功能简化为
open() {
return super.open("some/url/here");
}
和
open(path: string) {
return this.page.goto(path);
}
直接返回 Promise,这样
await someInstance.open()
仍会等待
goto()
完成。