client.getAsync('data')
.then((data) => {
if (data)
return [data.count, data.articles, true];
return [Article.count({}),
Article.find({}, '-_id title content slug')
.sort({_id: -1})
.limit(limit)
.skip((page - 1) * limit),
false]
})
.spread((count, articles, fromCache) => {
if (!fromCache) {
return new Promise((resolve, reject) => {
client.set('data', JSON.stringify({count, articles}), "EX", 20, (error) => {
if (error)
return reject(error);
return resolve([count, articles]);
});
});
}
return [count, articles];
})
.spread((count, articles) => {
return res.status(200)
.json({
count,
articles
})
})
.catch((err) => {
return next(err);
});
Тоже не очень, нужно разделение кода, вынести в репозитории, которые будут управлять кешем и тогда код в контроллерах будет красивше, ну и саму запись в кеш изначально сделать на промисах, тогда можно будет придумать что-то еще. spread из bluebird