厄运的传播和金字塔

时间:2014-04-25 08:39:59

标签: node.js 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);
})

但事实并非如此。

1 个答案:

答案 0 :(得分:0)

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