【发布时间】:2015-06-29 08:07:00
【问题描述】:
我希望在我的团队的代码库中标准化 Q Promise 的使用。是否有任何好的 jscs 扩展(或其他 linter)来帮助在 Promise 方面强制执行样式?
我们希望我们的承诺遵循这种形式:
promise()
.then()
.catch()
.done();
并且希望 linter 能够捕获我们代码中缺少 .catch() 的任何 .then()
也欢迎在承诺方面提供其他风格提示的建议。
【问题讨论】:
-
任何代码中的大多数
thens 后面都不应该跟catch,因为你的函数中的return承诺。您只会在 Promise 链的末尾使用这种模式(如果有的话),我想这对于简单的样式检查器来说很难跟踪。 -
详细阐述 Bergi 所说的 -
.then()必须拥有.catch和.done就像让每个函数都包装在try/catch中或让每个函数都没有返回值明确地说。在我看来,如果您想要更好的调试,请尝试 bluebird promises 而不是 Q,它们放弃了对.done的要求以显示异常并且它们的性能也更好。 基本上,这是 Qs 让你这样做的错误,你可以通过现代图书馆避免它。 -
另外,这是题外话(图书馆请求),但github.com/spion/thenlint
-
@BenjaminGruenbaum 谢谢你的建议!对每个
.then调用强制执行.catch的原因是我们有异常被.then吞噬,而catch 似乎是解决它的方法。例如,在返回 deferred.promise 的函数中:function() { var def = Q.defer(); promise.then(function(result){ // do something to modify result def.resolve(result); }) .catch(function(err) { def.reject(err); }) return def.promise(); }使用.done或 BlueBird 中的其他东西会更好地处理吗? -
@Jeff 这只是因为您使用的是 ancient 库、本机承诺(在 io.js 中)、RSVP 承诺,当承诺和蓝鸟承诺都为您提供工具时来处理这个问题。 Bluebird 在处理它方面是最好的(它也比 Q 快 100 倍,具有更好的堆栈跟踪和更丰富的 API)
标签: javascript coding-style promise q jscs