Блядь! Какого хера оно его выполняет вместо возврата deferred? Пиздец!

q = require("q")

a = q.Promise (resolve,reject,notify) ->
  setTimeout(
    ->
      bu = Math.random() * 100
      console.log("a", bu)
      resolve(bu)
    ,
    Math.random() * 3000
  )  

b = q.Promise (resolve,reject,notify) ->
  setTimeout(
    ->
      bu = Math.random() * 100
      console.log("b", bu)
      resolve(bu)
    ,
    1000 + Math.random() * 3000
  ) 

Результат вызова:

$ coffee promises_all.coffee 
Running node v0.11.13
a 83.59919420909137
b 5.926010990515351

Ну и что с этим блядь делать? Блядь. Блядь. Блядь.

q = require("q")

q.all([

  q.Promise (resolve,reject,notify) ->
    setTimeout(
      ->
        bu = Math.random() * 100
        console.log("a", bu)
        resolve(bu)
      ,
      Math.random() * 3000
    )
  ,
  q.Promise (resolve,reject,notify) ->
    setTimeout(
      ->
        bu = Math.random() * 100
        console.log("b", bu)
        resolve(bu)
      ,
      1000 + Math.random() * 3000
    ) 
    
])
.then (pizdec) ->
  console.log pizdec

Результат вызова:

$ coffee promises_all.coffee 
Running node v0.11.13
a 28.216111892834306
[ 28.216111892834306 ]
b 73.70093793142587

Сука блядь сука блядь сука блядь сука блядь. Эта сука блядь нихуя не понимает блядь что там блядь массив блядь вместо этого блядь она компилируется блядь в полную блядь хуйню блядь хотя блядь все отступы блядь расставлены блядь правильно блядь сука блядь. Вот блядь правильный вариант, блядь. Скобочек ей не хватает блядь сука блядь что за тупизм блядь.

q = require("q")

q.all([

  (a = q.Promise (resolve,reject,notify) ->
    setTimeout(
      ->
        bu = Math.random() * 100
        console.log("a", bu)
        resolve(bu)
      ,
      Math.random() * 3000
    )
  ),
  (b = q.Promise (resolve,reject,notify) ->
    setTimeout(
      ->
        bu = Math.random() * 100
        console.log("b", bu)
        resolve(bu)
      ,
      Math.random() * 3000
    ) 
  )

])
.then (pizdos) ->
  console.log pizdos

console.log a,b

Результат вывода:

$ coffee promises_all.coffee 
Running node v0.11.13
{ state: 'pending' } { state: 'pending' }
a 87.82047459390014
b 66.98890661355108
[ 87.82047459390014, 66.98890661355108 ]

В общем, грустно всё это.

Ловится:

q = require 'q'
co = require 'co'

tryErr = (genError,done) ->

  q.Promise (resolve,reject,notify) ->

    if genError
      throw "GeneratedError"
    else
      resolve("ok")

  .then (ok) -> 
    q.Promise (resolve,reject,notify) ->

      done()

  .catch (err) ->

    done(err)

  .done()

try
  tryErr(true,-> console.log "success")
catch err
  console.log "catch: " + err

Не ловится:

q = require 'q'
co = require 'co'

tryErr = (genError,done) ->

  q.Promise (resolve,reject,notify) ->

    if genError
      throw "GeneratedError"
    else
      resolve("ok")

  .then (ok) -> q.Promise (resolve,reject,notify) ->

      done()

  .catch (err) ->

    done(err)

  .done()

try
  tryErr(true,-> console.log "success")
catch err
  console.log "catch: " + err

Увы, это требует разбиения на две строки:

  .then (ok) -> q.Promise (resolve,reject,notify) ->
[ ]