javascript - 在 Javascript/NodeJs 中无需链接代码的多个数据库调用

标签 javascript node.js express

我使用 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 });
});

如您所料,这不起作用,因为代码在它有时间返回 productrelatedProducts 之前命中 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/

相关文章:

javascript - 简单的 Node/Express 应用程序,函数式编程方式(如何在 JavaScript 中处理副作用?)

express - InversifyJS:每个 HTTP 请求的依赖实例化

javascript - 从指令生成的 html 范围内调用函数?

javascript - 一段时间后重复执行函数的好模式是什么?

javascript - 具有小图形的 Neo4J 在 Ubuntu 16.04 上使用大量内存

javascript - Riot.js 动态呈现来自不同文件服务器端的嵌套自定义标签

javascript - express.js 以任意顺序链式路由

node.js - Express.js 路由 : optional splat param?

javascript - 如何显示按钮悬停在图像上方或按下图像?

javascript - 在 Ruby on Rails 上使用 uniformjs(我们也使用 coffee 和 scss)标准化表单