我使用 NodeJS 和 express 已经有一段时间了,但我似乎无法解决这个问题。
在我要展示的产品页面上
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 });
});
如您所料,这不起作用,因为代码在它有时间返回 product
和 relatedProducts
之前命中 res.render
.
现在我有几种方法可以解决这个问题,但我想知道实现这个的最佳模式/方法是什么。这样我就不必再重现代码了。
如果上面的某些内容没有意义,请告诉我!非常感谢(来自 JS 新手!)
最佳答案
最佳 模式是有争议的,但一种解决方案是使用 promise 。在每个通过 ID 获取产品/相关产品的函数中,您将返回一个在查询完成时解析的 promise 。然后,当这两个 promise 都得到解决时,您将进行渲染。
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 });
}
);
关于javascript - 在 Javascript/NodeJs 中无需链接代码的多个数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404993/