在Javascript中的Linting承诺

Jef*_*eff 6 javascript coding-style promise q jscs

我希望在我的团队的代码库中标准化Q promises的使用.在承诺方面,是否有任何好的jscs扩展(或其他短语)来帮助强制执行风格?

我们希望我们的承诺遵循以下形式:

promise()
  .then()
  .catch()
  .done();
Run Code Online (Sandbox Code Playgroud)

并希望.then()在我们的代码中捕获任何缺少a的内容.catch()

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

Mar*_*wak 2

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

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

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

  • @Jeff:但是这些符号[不等效](http://stackoverflow.com/a/24663315/1048572)?! (2认同)