update tutorial nodejs node introduccion espaƱol ejemplos actualizar node.js coffeescript q

node.js - tutorial - Q.todo no llama a tareas



npm install (1)

Q.all ayudante espera una matriz o promete resolverla, no una matriz de funciones. Significa que debe llamar a todas sus tareas usted mismo si quiere usar Q.all .

En su ejemplo, eliminar las envolturas anónimas de la función hará el truco:

constructor: () -> Q.all([ @task1() @task2() ]).then (results) -> // Success .catch (error) -> // Error

Así que tengo este CoffeeScript (simplificado para centrarse en el problema real)

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()

El resultado es:

results [ [Function], [Function] ]

En Main::constructor , callbacks @task1 y @task2 no parecen ser llamados. Para estar seguro de esto, he agregado console.log en la parte superior de ambos. Y como no se imprimen, puedo estar seguro de que no los llaman.

Para fines de prueba, reemplacé este bloque

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

por este bloque

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

y esto realmente funciona como se espera, pero no es lo que quiero. El objetivo es comenzar las tareas 1 y 2 en paralelo.

Nota al margen: dentro de las tareas, me gustaría poder usar @ para las variables miembro de Main

¿Qué pasa?