Q.传播和厄运的金字塔

我有这个代码:

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

虽然效果很好,但它开始看起来像厄运的金字塔。 有没有一种方法来重构它更“有前途”?

我期望这样的工作:

 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); }) 

但事实并非如此。

 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); });