多个数据库调用而不在Javascript / NodeJs中链接代码

时间:2015-09-04 19:05:40

标签: javascript node.js express

我一直在玩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新手!)

1 个答案:

答案 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 });
  }
);