¿Cómo manejar correctamente los errores con IcedCoffeeScript?

Es una práctica común en node.js devolver un mensaje de error como el primer argumento a una función de devolución de llamada. Hay una serie de soluciones a este problema en JS puro (Promesa, Paso, seq, etc.), pero ninguna de ellas parece ser integrable con ICS. ¿Cuál sería la solución correcta para manejar los errores sin perder mucho de legibilidad?

Por ejemplo:

# makes code hard to read and encourage duplication
await socket.get 'image id', defer err, id
if err # ...
await Image.findById id, defer err, image
if err # ...
await check_permissions user, image, defer err, permitted
if err # ...


# will only handle the last error
await  
  socket.get 'image id', defer err, id
  Image.findById id, defer err, image
  check_permissions user, image, defer err, permitted

if err  # ...


# ugly, makes code more rigid
# no way to prevent execution of commands if the first one failed
await  
  socket.get 'image id', defer err1, id
  Image.findById id, defer err2, image
  check_permissions user, image, defer err3, permitted

if err1 || err2 || err3  # ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta