Javascript 中的 Linting Promises

Linting Promises in Javascript

我希望在我的团队的代码库中标准化 Q promise 的使用。是否有任何好的 jscs 扩展(或其他 linters)来帮助在承诺方面加强风格?

我们希望我们的承诺遵循这种形式:

promise()
  .then()
  .catch()
  .done();

并且希望 linter 能够捕获我们代码中缺少 .catch()

的任何 .then()

也欢迎就有关 promises 的其他文体技巧提出建议。

@Jeff 这种方法看起来完全矫枉过正。这两个函数都不能跟在 any 后面。他们每个人都有不同的目的:

  • 当您想要处理已解析的值时使用 then(mapSuccess, mapFail) 并且您需要一个结果承诺,该承诺将使用回调返回的值进行解析
    从技术上讲,它是将价值映射到将由其他承诺解决的其他价值。您可能会认为它与数组的 map 类似,您可以将输入数组映射到其他数组,这是某些转换函数的结果。
  • catch(mapFail) 纯粹是 then(null, mapFail) 的别名,所以当你想 then 时使用它就可以了,而不需要传递 mapSuccess回调。
  • done(onSuccess, onFail) 使用简单,当您只想处理已解析的值(无需映射到其他承诺)时。 done 还将确保所有最终错误自然暴露(thencatch 因为它们是映射器,所以将错误吞入承诺结果中)。

我只能想象一个规则,可以为 linter 添加该规则(并且假设您使用的库不记录吞噬的异常)。这是为了警告 then()catch() 用法,当它们的结果被忽略时(它们应该跟随 done(..) 或传递给其他实体进行处理)。