【问题标题】:Am I using async await the right way? In TypeScript我是否以正确的方式使用异步等待?在打字稿中
【发布时间】:2019-07-23 17:39:28
【问题描述】:

我不确定我在 TypeScript 和 Protractor 代码中是否以正确的方式使用 async/await。如果你看到下面的代码,规范说 await 并调用页面对象,而页面对象又是 async/await。页面对象调用另一个方法,该方法又是 async/await。这是正确的实施吗?有没有最佳实践?我觉得我到处都在使用 async/await。

规格:

await login.loginTomySiteTools();

页面对象:

async loginTomySiteTools(): Promise<void> {
    await this.helper.enterText(this.email, this.mySuperApp.userID);
    await this.helper.click(this.btnNext);
}

助手:

async enterText(element: WebElement, textToEnter: string): Promise<void> {
    await browser.sleep(1000);
    await element.sendKeys(textToEnter);
}

【问题讨论】:

  • 看起来不错。我不知道 Protractor 是如何工作的以及您在哪里编写 await login.loginTomySiteTools(); 调用,但它需要保留在 async function 中。不仅如此,调用async 函数的函数必须知道被调用者是async 并返回Promise。否则在控制权返回给调用者后,被调用者的代码将完成,对被调用者行为的期望将失败。
  • 感谢@axiac 的回答

标签: typescript async-await protractor


【解决方案1】:

尽管看起来很奇怪,但据我了解,您以正确的方式使用它。 Protractor 的本质是所有浏览器操作都用 Promise 包装(需要等待),然后使用页面对象模型,我们在页面对象中声明的所有功能(通常包含浏览器操作)也需要等待。我们最终会等待很多相同的操作。

实际上我在不久前问过similar question,我不确定这些问题是否足够相似以至于可以被标记为重复,所以我暂时不会标记它。

就最佳实践而言,我认为您采用的方法很好。

【讨论】:

  • 感谢您的回复。我在其他任何地方都找不到更好的答案。是的,你和我在问同一个问题,但从不同的角度。虽然最终目标是相同的,但我无法从基本搜索中找到您的问题。如果您愿意,可以标记此重复项,但我建议您重新表述您的问题,使其可供普通观众搜索。 :)
  • 是的,我同意你的观点,我的问题更加具体,所以我认为这些不是重复的。我想分享我得到的答案,以防你觉得它有帮助,但希望这个问题会产生比我收到的更多技术性答案。
  • 是的,我也有同样的期待,但看起来很多人都知道我猜 :) :)
猜你喜欢
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多