Q. extendido y piramide de la fatalidad

Tengo este codigo

Q.spread([ Q.nfcall(employee.save.bind(employee)), ],function(emp){ Q.spread([Q.nfcall(dept.save.bind(dept))],function(dept){ console.log("success") },function(e){ console.error(e); mongoose.disconnect(); }) },function(e){ console.error(e); mongoose.disconnect(); }) 

Aunque funciona muy bien, comienza a parecerse a la pirámide de la fatalidad. ¿Hay una manera de refactorizarlo para que sea más “prometedor”?

Esperaba que algo como esto estuviera funcionando:

 Q.spread([ Q.nfcall(employee.save.bind(employee)) ]).then(function(emp){ var dept = new Department(); return Q.spread([ Q.nfcall(dept.save.bind(dept)) ]) }).then(function(dept){ console.log("success"); }).catch(function(e){ console.error(e); }) 

pero no lo es

 Q.nfcall(employee.save.bind(employee)).spread(function(emp, numberAffected) { return Q.nfcall(dept.save.bind(dept)); }).spread(function(dept, numberAffected) { console.log("success"); mongoose.disconnect(); }).catch(function(e) { console.error(e); });