[英]Why am I not getting "Redundant return await" (ESLint: no-return-await) warning for all the below code snippets?
我有以下代码路径,它们在“IntelliJ”中给出了冗余返回等待警告:( https://eslint.org/docs/rules/no-return-await )
注意:我看到 -ve 为我的问题投票。 我很可能遗漏了一些基本的东西——你能在评论/问题中指出我遗漏了什么吗? 我花了大量时间问这个问题——如果你为 -ve 投票添加细节会很有帮助。
import {browser, By, element, promise, protractor} from 'protractor';
async randomMethod(): Promise<string> {
return await element.all(By.css('.random-class')).first().getText();
}
async randomMethod4() {
return await browser.driver.get(this.url);
}
请注意,只需删除上述方法中的 await 即可消除警告(如以下代码片段)。 但我的问题是为什么下面的方法可以做“返回等待”,而不是“上面”。
async randomMethod(): Promise<string> {
return element.all(By.css('.random-class')).first().getText();
}
而以下代码路径不会给出相同的警告:
async randomMethod2(): Promise<number> {
return await element.all(By.css('.mat-row')).count();
}
async randomMethod3() {
return await element.all(By.css('.random-class')).first();
}
我试图详细了解警告的原因,即使我的测试通过了,因为我可能在这里遗漏了一些微妙的东西。 任何想法都有帮助。
return await element.all(By.css('.random-class')).first().getText();
顺便说一句,以下是函数定义/原型:
first(): ElementFinder;
count(): wdpromise.Promise<number>;
getText(): promise.Promise<string>;
get(url: string): promise.Promise<void>;
async
函数总是返回一个 Promise,即使你没有在它们里面等待。 由于它们总是返回一个 Promise,因此您总是必须在调用站点(通过使用 await 或 .then())“解开它们”,以便在解决时获取值或执行某些操作。
当您使用return await
您只是在“包装”一个承诺,只为再次“包装”该值(因为您在async
函数中),因此它始终是多余的。
它不会影响您的代码的行为,这就是您的测试仍然通过的原因。
编辑:
在从 eslint 阅读了一些关于no-return-await规则之后,结果证明在一种情况下它不是多余的,它位于 try-catch 块内。
async function foo() {
try {
return await bar();
} catch (error) {}
}
await
是必要的,以便能够捕获从bar()
抛出的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.