2016-03-03 131 views
1

有沒有辦法避免使用'q'下面的代碼嵌套鏈接,任何好的方式來使用承諾?承諾使用nodejs和sequelize

global.models.test.destroy({ 
     where: { 
      id: req.params.id 
     } 
    }).then(function() { 
     global.models.test1.findAll({ 
       attributes:[['id','testId']], 
       include:[{ 
        model: global.models.test2, 
        where: { 
         masterId: req.params.id 
        }, 
        required: true 
       }] 
     }).then(function(app){ 
      var arrIds =[]; 
      for(var result in app){ 
       var collection = app[result].dataValues; 
       arrIds.push(collection.id); 
      } 

      global.models.test1.destroy({ 
       where: { 
        id: arrIds 
       } 
      }).then(function() { 
       global.models.destroy({ 
        // nested loops again and so on 
       }): 
      }))); 

我正在尋找通過避免嵌套循環來清理代碼的方法。歡迎所有幫助

回答

0

是的,只需從您的then返回您的承諾。

global.models.test.destroy({ 
    where: { 
     id: req.params.id 
    } 
}).then(function() { 
    return global.models.test1.findAll({ 
     attributes:[['id','testId']], 
     include:[{ 
      model: global.models.test2, 
      where: { 
       masterId: req.params.id 
      }, 
      required: true 
     }] 
    }) 
}).then(function(app) { 
    var arrIds = []; 
    for(var result in app) { 
     var collection = app[result].dataValues; 
     arrIds.push(collection.id); 
    } 
    return global.models.test1.destroy({ 
     where: { 
      id: arrIds 
     } 
    }); 
}).then(function() { 
    return global.models.destroy({ 
     //and so on 
    }); 
}); 

我也想避免污染global變量。