Я создаю приложение в Express и использую Postgres для своей базы данных, Sequelize для ORM.
В моей базе данных каждый Post может иметь один из 5 типов: 1, 2, 3, 4, 5.
Я хочу показать количество всех постов по типу.
router.route('/post).get(async (req, res) => {
const postOne = await Post.findAll({
where: {
state: 1
}
});
const postTwo = await Post.findAll({
where: {
state: 2
}
});
res.send({ postOne: postOne.length, postTwo: postTwo.length });
Я могу написать так для всех 5 типов, но мне было интересно, есть ли более короткий способ сделать это, чтобы мне не приходилось писать один и тот же код 5 раз.
Спасибо!
Я использую Node и Postgres
вы уверены, что не используете ExpressJs или что-то в этом роде? Я считаю, что NodeJS не имеет ORM включен. Большинство ORM предоставляют функцию агрегирования, которая поможет вам получить все подсчеты за один запрос.
спасибо @skyboyer Я разъяснил свой вопрос
Теперь после уточнения кажется, что следующая ссылка - именно то, что вам нужно: stackoverflow.com/questions/22627258/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


const getPostWithType = (type) => Post.findAll({
where: {
state: type
}
});
Теперь вы можете использовать await getPostWithType(1). Или даже лучше:
const postTypes = [1,2,3,4,5];
const allPosts = await Promise.all(postTypes.map(getPostWithType));
// allPosts is now an array with the results. You can map it again to get the lengths
const allPostLengths = allPosts.map(p => p.length);
как насчет использования массива? Как показано ниже ...
let promiseArray = [];
for (let i = 1; i <= 5; i++) {
let promise = Post.findAll({
where: {
state: i
}
});
promiseArray.push(promise);
}
Promise.all(promiseArray).then(function(response) {
//Do whatever...
});
какой фреймворк вы используете? какую БД вы используете?