我有以下查询:
function calculate_stats() {
Users.count().then(function(allusers) {
Users.count().then(function(dead_users) {
Users.count().then(function(banned_users) {
Users.count().then(function(vacation_users) {
Users.count().then(function(in_hotel_users) {
var aliveusers = allusers - dead_users - banned_users;
var accounts = {
registred: allusers,
alive: aliveusers,
dead: dead_users,
banned: banned_users,
vacation: vacation_users,
inhotel: in_hotel_users,
outsidehotel: aliveusers - in_hotel_users,
outsidehotelonline: 0
};
});
});
});
});
});
});
}
但这是否是最好的方式来嵌套它们,以获得最终结果? 我将如何获得一个计算统计数据的好方法。
这不是表现有效吗?
答案 0 :(得分:3)
由于所有查询似乎彼此独立,因此您可以并行执行它们。您可以使用Q之类的承诺库(使用Q.all方法)从所有人创建组合承诺,或者如果使用ES6则使用Promise.all
function calculate_stats() {
var promiseArr = [
Users.count(),
Users.count(),
Users.count(),
Users.count(),
Users.count()
]
Q.all(promiseArr).then(function (results) {
var allusers = results[0];
var dead_users = results[1];
// and so on
var aliveusers = allusers - dead_users - banned_users;
var accounts = {
registred: allusers,
alive: aliveusers,
dead: dead_users,
banned: banned_users,
vacation: vacation_users,
inhotel: in_hotel_users,
outsidehotel: aliveusers - in_hotel_users,
outsidehotelonline: 0
};
})
});
}