承诺使用nodejs和sequelize

时间:2016-03-03 09:31:09

标签: node.js sequelize.js q

有没有办法避免使用'q'对下面的代码进行嵌套链接,是否有使用promise的好方法?

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

我正在寻找通过避免嵌套循环来清理代码的方法。欢迎所有帮助

1 个答案:

答案 0 :(得分: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变量。