我有以下查询:
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
};
});
});
});
});
});
});
}
,但这真的是最好的方式来嵌套它们,以获得最终结果吗?我该如何得到一个计算统计数据的好方法呢?
这会影响性能吗?
因为所有的查询看起来都是相互独立的,所以可以并行地执行它们。你可以使用像Q这样的承诺库(使用Q.all方法)来创建一个来自all的组合承诺,或者使用use promise。如果使用ES6
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
};
})
});
}