在JavaScript / NodeJs中没有链接代码的多个数据库调用

我一直在玩NodeJS,并expression了一段时间,但我似乎无法绕过这一个。

在我想要显示的产品页面上

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

正如你所期望的那样,这是行不通的,因为代码在有时间返回productrelatedProducts之前relatedProducts

现在我有几个方法来解决这个问题,但是我想知道实现这个的最佳模式/方法是什么。 这样我就不必重现代码。

如果上面的一些没有意义,请让我知道! 非常感谢(从JS新手!)

最好的模式是有争议的,但一个解决scheme是使用承诺。 在每个通过ID获取产品/相关产品的函数中,您将返回一个在查询完成时parsing的承诺。 那么,当这两个承诺解决了,你渲染。

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