You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求强制Promise链式调用换行缩进的ESLint规则

实现Promise链式调用格式的ESLint配置方案

嘿,刚好能帮到你!要实现你想要的每个.then单独占一行且缩进4个空格的Promise链式调用格式,只需要配合使用ESLint的两个核心规则即可:

所需规则说明

  • newline-per-chained-call:强制链式调用的每个方法(比如.then、.catch)单独占据一行,避免链式调用挤在同一行。
  • indent:控制代码缩进,这里我们需要配置成员表达式(也就是.then这类链式调用的部分)缩进4个空格。

具体配置示例

在你的ESLint配置文件(比如.eslintrc.js)中添加以下规则:

module.exports = {
  // 其他配置项...
  rules: {
    // 强制链式调用每个方法换行
    'newline-per-chained-call': ['error', { ignoreChainWithDepth: 1 }],
    // 配置缩进为4个空格,链式调用的成员表达式缩进一级
    'indent': ['error', 4, {
      MemberExpression: 1,
      // 可以根据你的代码风格添加其他缩进配置,比如函数体、参数的缩进
      FunctionDeclaration: { body: 1, parameters: 1 },
      FunctionExpression: { body: 1, parameters: 1 }
    }]
  }
};

规则生效后的效果

配置完成后,ESLint会自动检查并修复不符合要求的代码:

不符合规范的代码会被提示错误

// ❌ 错误:链式调用挤在同一行,缩进不足
aPromiseCall().then(() => { // logic }).then(() => { // logic }).catch(() => { })

自动修复后符合规范的代码

// ✅ 正确:每个.then/.catch单独一行,缩进4个空格
aPromiseCall()
    .then(() => { // logic })
    .then(() => { // logic })
    .catch(() => { })

针对TypeScript项目的调整

如果你是在TypeScript项目中使用ESLint,需要使用@typescript-eslint/indent规则替代原生的indent规则,配置示例如下:

module.exports = {
  // 其他配置项...
  rules: {
    'newline-per-chained-call': ['error', { ignoreChainWithDepth: 1 }],
    '@typescript-eslint/indent': ['error', 4, {
      MemberExpression: 1,
      // 按需添加TypeScript相关的缩进配置
    }]
  }
};

内容的提问来源于stack exchange,提问作者Igor L.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:14:19