我一直在玩NodeJS并表达一段时间,但我似乎无法解决这个问题。
在我要显示的产品页面上
1)产品
2)关系产品
我希望能够重用这段代码,理想情况下我会写这样的
/* Function to get info */
function getProduct($id){
//Finds the product info from postgres with all information and returns it.
}
function getRelatedProducts($id){
//Finds related products from postgres and returns it.
}
/* Routing */
router.get('/:id', function(req, res, next) {
var product = getProduct(req.params.id);
var relatedProducts = getRelatedProducts(req.params.id);
res.render('product', { item: product, related: relatedProducts });
});
正如您所期望的那样,在代码返回res.render
并且有时间返回product
之前,这并不起作用。{1}}& d relatedProducts
。
现在我有几种方法可以实现这个目标,但我想知道实现这一目标的最佳模式/方式是什么。所以我不必再重现代码。
如果以上某些内容没有意义,请告诉我们!非常感谢(来自JS新手!)
答案 0 :(得分:3)
最佳模式是有争议的,但一种解决方案是使用promises。在按ID获取产品/相关产品的每个功能中,您将返回在查询完成时解析的承诺。然后,当这两个承诺都得到解决时,你就会渲染。
var productPromise = getProduct(req.params.id);
var relatedProductsPromise = getRelatedProducts(req.params.id);
Promise.all([productPromise, relatedProductsPromise]).then(
function (product, relatedProducts) {
res.render('product', { item: product, related: relatedProducts });
}
);