Javascript中的Linting承诺

Javascript中的Linting承诺,javascript,coding-style,promise,q,jscs,Javascript,Coding Style,Promise,Q,Jscs,我希望在我的团队的代码库中标准化Q承诺的使用。当涉及到承诺时,是否有好的jscs扩展(或其他linter)来帮助加强风格 我们希望我们的承诺遵循以下形式: promise() .then() .catch() .done(); 并且希望一根短绒捕捉代码中缺少的.catch()中的任何.then() 当谈到承诺时,我们也欢迎为其他文体技巧提供建议。@Jeff这种做法看起来完全是矫枉过正。这两个函数都不必使用任何函数。每一个都有不同的目的: 当您想要处理解析值并且需要使用回调返回的值

我希望在我的团队的代码库中标准化Q承诺的使用。当涉及到承诺时,是否有好的jscs扩展(或其他linter)来帮助加强风格

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

promise()
  .then()
  .catch()
  .done();
并且希望一根短绒捕捉代码中缺少的
.catch()
中的任何
.then()


当谈到承诺时,我们也欢迎为其他文体技巧提供建议。

@Jeff这种做法看起来完全是矫枉过正。这两个函数都不必使用任何函数。每一个都有不同的目的:

  • 当您想要处理解析值并且需要使用回调返回的值解析的结果承诺时,请使用
    then(mapSuccess,mapFail)

    从技术上讲,这是一种价值到其他价值的映射,将由其他承诺解决。您可以将其类似于数组的
    映射
    ,您可以使用它将输入数组映射到另一个数组,这是某些转换函数的结果
  • catch(mapFail)
    纯粹是
    then(null,mapFail)
    的别名,所以当您想
    then
    但无需通过mapsucture回调时,只需使用它即可
  • done(onSuccess,onFail)
    当您只想处理已解析的值(无需映射到其他承诺)时,请简单使用
    done
    还将确保所有最终的错误都自然暴露出来(
    然后
    catch
    因为他们是映射者,所以将错误吞入承诺结果中)

我可以想象只有一条规则可以为linter添加(假设您使用的库不记录异常)。当结果被忽略时,它警告
then()
catch()。你只会在承诺链的末尾使用这种模式(如果有的话),我想这对于一个简单的样式检查器来说是很难跟踪的
必须有一个
.catch
.done
就像让每个函数包装在一个
try/catch
中,或者让每个没有返回值的函数明确地这样说。在我看来,如果您想要更好的调试,请尝试bluebird Promissions而不是Q,他们会放弃对
.done
的要求,以便显示异常,而且他们的性能也会更好。基本上,这是Qs让你这么做的错误,你可以用现代图书馆来避免它。此外,这是离题(图书馆请求),但@BenjaminGruenbaum感谢你的建议!对每个
调用强制执行
.catch
。然后
的原因是我们有异常被
吞没。然后
,而catch似乎是解决它的方法。例如,在一个返回deferred.promise的函数中:
function(){var def=Q.defer();promise.then(函数(结果){//执行一些操作来修改结果def.resolve(结果);}).catch(函数(err){def.reject(err);})返回def.promise();}
使用
.done
或蓝鸟什么东西处理这个问题会更好吗?@Jeff这只是因为你使用的是一个古老的库,原生承诺(在io.js中)、RSVP承诺,而承诺和蓝鸟承诺都为你提供了处理这个问题的工具。Bluebird在处理它的方式上是最好的(它比Q快100倍,有更好的堆栈跟踪和更丰富的API),我们决定使用
。然后
。catch
,因为我们发现它比
然后(onSuccess,onFail)
更可读。但是您的done注释很有趣,因为我们希望实现这个linting主要是为了避免错误。在我回答Benjamin关于原始问题的评论这样的情况下,
.done
会比
更合适吗?那么如果我们想避免被吞没的错误,那么
会不会更合适呢?我用参数名来更好地描述每个方法的作用,并说明
.catch
并没有真正的区别。然后
。我现在又更新了它们,以区分
。然后
。完成了
:)@Jeff:但是那些符号呢?!实际上,
.then(onSuccess,onError)
.then(onSuccess).catch(onError)
并不相同。前者不捕捉onSuccess方法内部发生的错误。98%的时候前者是反模式的。