【发布时间】:2015-02-02 22:03:58
【问题描述】:
让我们进入正题。我喜欢 CS,我喜欢 node,而且我非常喜欢按照上帝的建议使用回调。
不幸的是,我通常会在稍微嵌套的回调中不断检查错误。
以下是完成相同示例任务的三种不同样式。 哪一个可以避免缩进和条件地狱,同时又不牺牲可读性?
如果不使用 Promise、async 或 iced-cs,请随时提出新的建议。
authenticate: (token, cb) =>
@collection 'services', (err, collection) =>
if err
cb err, undefined
else
collection.findOne token: token, (errFindingService, service) =>
if err
cb errFindingService, undefined
else
cb undefined, service
authenticate: (token, cb) =>
@collection 'services', (err, collection) =>
if not err
collection.findOne token: token, (errFindingService, service) =>
if not errFindingService
cb undefined, service
else
cb errFindingService, undefined
else
cb err, undefined
authenticate: (token, cb) =>
@collection 'services', (err, collection) =>
return cb err, undefined if err
collection.findOne token: token, (errFindingService, service) =>
return cb errFindingService, undefined if err
cb undefined, service
PS:在第二个中,我使用if not err 而不是unless 以符合https://github.com/polarmobile/coffeescript-style-guide
提前谢谢大家。 ^_^
【问题讨论】:
-
这可能更适合Code Review SE。不过,如果最内部的回调只是确定如何调用
cb,则可能不需要它——collection.findOne token: token, cb。而且,就我个人而言,我建议重新考虑async等——gist.github.com/coiscir/2ab7751207d5af6b4e0b。 -
哇,我什至不知道 Code Review 的存在,谢谢。至于异步选项当然更好,但它并不总是一个选项。我想知道这些时刻的最佳风格。 :)
标签: node.js coding-style coffeescript