在Javascript中的Linting承诺

时间:2015-04-21 22:42:09

标签: javascript coding-style promise q jscs

我希望在我的团队代码库中标准化Q promises的使用。是否有任何好的jscs扩展(或其他短语)来帮助实现承诺的风格?

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

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

并希望在我们的代码中找到缺少.then()

的任何.catch()的帖子

对于承诺的其他风格提示的建议也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

@Jeff这种方法看起来总是矫枉过正。这些功能都不能跟随任何一个。他们每个人都有不同的目的:

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

我可以想象只有一个规则可以添加到linter中(假设你使用的库没有记录吞下的异常)。当他们的结果被忽略时,他们会警告then()catch()这些用法(它们应该跟done(..)或者传递给其他实体进行处理)。