node.js - Q.all doesn't call tasks -


so have coffeescript (simplified focus on real problem)

q = require 'q' events = require 'events'  class someobj extends events.eventemitter    constructor: () ->     settimeout () =>       @emit 'done'     , 3000   class someobj2 extends events.eventemitter    constructor: () ->     settimeout () =>       @emit 'done'     , 50000  class main    someobj1: null   someobj2: null   constructor: () ->     q.all([       => @task1(),       => @task2()])     .then (results)->       console.log 'results'       console.log results     .catch((error)->       console.log 'error'       console.log error     )    task1: () ->     console.log 'task1 started'     defer = q.defer()     @someobj = new someobj()      @someobj.on 'done', (err, data) =>       console.log 'task1 done'       defer.resolve data      return defer.promise    task2: () ->     console.log 'task2 started'     defer = q.defer()     @someobj2 = new someobj2()      @someobj2.on 'done', (err, data) =>       console.log 'task2 done'       defer.resolve data      return defer.promise   main = new main() 

the output is:

results [ [function], [function] ] 

in main::constructor, callbacks @task1 , @task2 doesn't seem called. sure this, i've had added console.log @ top of both of them. , don't printed out, can sure they're not called.

for testing purposes, replaced block

  constructor: () ->     q.all([       => @task1(),       => @task2()])     .then (results)->       console.log 'results'       console.log results     .catch((error)->       console.log 'error'       console.log error     ) 

by block

  constructor: () ->     q.fcall () => @task1()     .then ()  => @task2()     .then (results)->       console.log 'results'       console.log results     .catch((error)->       console.log 'error'       console.log error     ) 

and works espected, it's not want. goal start task1 , 2 in parallel.

side note: inside tasks, able use @ member variables of main

what's wrong?

q.all helper expects array or promises resolve, not array of functions. means should call tasks if want use q.all.

in example, removing anonymous function wrappings trick:

constructor: () ->   q.all([     @task1()     @task2()   ]).then (results) ->     // success   .catch (error) ->     // error 

Comments

Popular posts from this blog

matlab - "Contour not rendered for non-finite ZData" -

delphi - Indy UDP Read Contents of Adata -

javascript - Any ideas when Firefox is likely to implement lengthAdjust and textLength? -