Jak poprawnie obsługiwać błędy w IcedCoffeeScript?

Powszechną praktyką w node.js jest zwracanie komunikatu o błędzie jako pierwszego argumentu funkcji wywołania zwrotnego. Istnieje wiele rozwiązań tego problemu w czystym JS (Promise, Step, seq itp.), Ale żaden z nich nie wydaje się być integrowalny z ICS. Jakie byłoby właściwe rozwiązanie problemu błędów bez utraty czytelności?

Na przykład:

# 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  # ...

questionAnswers(2)

yourAnswerToTheQuestion