我需要在本身使用await的函数上使用await吗?

问题描述 投票:0回答:1

我在 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
吗?

谢谢!

javascript asynchronous async-await
1个回答
1
投票

是的,两个地方都需要。

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()
完成。
    

© www.soinside.com 2019 - 2024. All rights reserved.