Javascript 下面的快速路由器在做什么?
我下面的教程有以下两种从db获取文章的方法Javascript 下面的快速路由器在做什么?,javascript,node.js,express,Javascript,Node.js,Express,我下面的教程有以下两种从db获取文章的方法 router.param('article', function(req, res, next, slug) { Article.findOne({ slug: slug}) .populate('author') .then(function (article) { if (!article) { return res.sendStatus(404); } req.article = article;
router.param('article', function(req, res, next, slug) {
Article.findOne({ slug: slug})
.populate('author')
.then(function (article) {
if (!article) { return res.sendStatus(404); }
req.article = article;
return next();
}).catch(next);
});
router.get('/:article', auth.optional, function(req, res, next) {
Promise.all([
req.payload ? User.findById(req.payload.id) : null,
req.article.populate('author').execPopulate()
]).then(function(results){
var user = results[0];
return res.json({article: req.article.toJSONFor(user)});
}).catch(next);
});
关于上述方法,我有两个问题
Promise.all()
如何工作router.get()
方法中重新填充author字段,而在router.param()
方法中已经这样做了[req.payload?User.findById(req.payload.id):null,
req.article.populate('author').execPopulate()]
Mongoose文档最后也提到了这一点,作为注释。
Promise.all()
获取承诺列表并返回一个新承诺,该承诺在返回所有提供的承诺时返回一个值。返回的值将是参数的结果数组。换句话说,这是一种并行执行多个异步任务的方法,然后等待它们全部完成后再继续。为什么我们需要在router.get()方法中重新填充author字段,而在router.param()方法中已经这样做了?