如何在 Generator 中忽略 yield 返回值且不产生未使用变量警告

作者:袖梨 2026-07-06

在 JavaScript Generator 函数中,若只需执行 yield 副作用(如发起 API 调用)而无需其返回值,直接赋值给变量会触发 ESLint 的 no-unused-vars 警告;此时可省略变量声明,仅用 yield expression 语句即可安全忽略返回值,无需 void 或占位符。

在 javascript generator 函数中,若只需执行 `yield` 副作用(如发起 api 调用)而无需其返回值,直接赋值给变量会触发 eslint 的 `no-unused-vars` 警告;此时可省略变量声明,仅用 `yield expression` 语句即可安全忽略返回值,无需 `void` 或占位符。

Generator 函数中的 yield 表达式本质是暂停执行并交出控制权,其返回值(即 iterator.next(value) 中传入的 value)属于下一次恢复时的输入,而非当前 yield 的输出。而 yield expression 本身的求值结果(即 expression 的返回值)才是当前 next() 调用所获取的 .value —— 这个值完全可以被忽略,就像忽略普通函数调用的返回值一样。

✅ 正确写法(推荐):直接执行,不声明变量

function* cancelCredit(action) {  yield call(/* Nice api call 1 */); // ✅ 无变量、无警告、语义清晰  const res2 = yield call(/* Nice api call 2 */);  // 处理 res2...  yield put({ type: 'CREDIT_CANCELLED' });}

⚠️ 注意事项:

  • void yield call(...) 虽能绕过 ESLint 警告,但属于过度设计——void 用于强制丢弃 Promise 防止“未处理拒绝”,而此处 yield 本身不返回 Promise,call(...) 的返回值由 redux-saga 等中间件管理,与 Promise 状态无关;
  • 不要误用 yield;(无表达式),它等价于 yield undefined,无法触发异步任务;
  • 若你使用的是 eslint-plugin-react-hooks 或自定义规则强制要求“所有 yield 必须赋值”,应优先调整规则配置,而非妥协代码可读性。

? 总结:Generator 中 yield expression 是一条完整的语句,无需绑定变量。忽略返回值是合法且惯用的写法,既符合语言规范,也保持代码简洁专业。

相关文章

精彩推荐