簡體   English   中英

為什么我沒有收到以下所有代碼片段的“冗余返回等待”(ESLint:no-return-await)警告?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM