#node.js #mongoose
#node.js #mongoose
Вопрос:
Я не уверен, что понимаю разницу и преимущества перехода от классических обратных вызовов mongoose и обещаний ES6. Этот агрегированный запрос
router.get('/', function(req,res) {
caseNote.aggregate([
{$unwind: '$field'},
{$match: {field: "aaa"}},
{$project: {field: 1, _id: 0}}
])
.exec(function(err, data) {
if (err)
res.json(err);
else {
if(data[0])
res.json(data[0].field);
else
res.json([]);
}
});
});
с некоторым количеством сахара ES6 будет включен
router.get('/', cache, function(req,res) {
caseNote.aggregate([
{$unwind: '$field'},
{$match: {field: "aaa"}},
{$project: {field: 1, _id: 0}}
])
.exec()
.then(data => res.json(data[0] ? data[0].field: {error:"result error"}))
.catch(err => res.json(err) );
});
почему я предпочел then() amp; catch()
бы brothers вместо exec()
обратного вызова?
Ответ №1:
С обещаниями ES6 код становится более чистым и читаемым, поскольку вы можете воспользоваться преимуществами catch()
метода и обрабатывать ошибки в одном блоке кода.
В этом конкретном примере я не вижу большой разницы, поскольку нет множественных обратных вызовов.
Это отличная статья, в которой гораздо больше деталей.
https://github.com/getify/You-Dont-Know-JS/blob/master/async & performance/ch3.md
Комментарии:
1. Я прочитаю весь репозиторий, спасибо. В то же время, побочный вопрос: будут ли генераторы ES6 «перегнаны» обещаниями или у них разные цели?
2. Ну, генераторы имеют много разных применений, но на самом деле, я думаю, что все будет наоборот, поскольку асинхронные функции ES7 основаны на генераторах. Это действительно хорошее чтение! rossboucher.com/await /#