跳到主要內容

return_in_generator

不能從使用 'async*' 或 'sync*' 修飾符的生成器函式返回一個值。

描述

#

當生成器函式(其函式體標記有 async*sync*)使用 return 語句返回值,或由於使用 => 隱式返回值時,分析器會生成此診斷資訊。在任何這些情況下,都應該使用 yield 代替 return

示例

#

以下程式碼會生成此診斷資訊,因為方法 f 是一個生成器,並且使用了 return 來返回值

dart
Iterable<int> f() sync* {
  return 3;
}

以下程式碼會生成此診斷資訊,因為函式 f 是一個生成器,並且隱式返回了一個值

dart
Stream<int> f() async* => 3;

常見修復方法

#

如果函式體使用了 =>,則將其轉換為塊函式體,並使用 yield 返回值

dart
Stream<int> f() async* {
  yield 3;
}

如果方法意圖作為生成器,則使用 yield 返回值

dart
Iterable<int> f() sync* {
  yield 3;
}

如果方法不意圖作為生成器,則從函式體中移除修飾符(或者如果要返回 Future,則使用 async

dart
int f() {
  return 3;
}