[英]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.