Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/NodeJs中无链接代码的多个DB调用_Javascript_Node.js_Express - Fatal编程技术网

Javascript/NodeJs中无链接代码的多个DB调用

Javascript/NodeJs中无链接代码的多个DB调用,javascript,node.js,express,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 getRelatedProduc

我一直在玩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 });
});
正如您所期望的那样,当代码在返回
产品之前点击
res.render
relatedProducts
时,这不起作用

现在我有一些方法来解决这个问题,但我想知道实现这一点的最佳模式/方法是什么。这样我就不必再复制代码了

如果上面的一些不合理,请让我知道!非常感谢(来自JS新手!)

最好的模式是有争议的,但是一个解决方案是使用承诺。在每个按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 });
  }
);

愚蠢的问题提醒。承诺只是标准的JS吗?找到了我的答案!这是完美的,正是我一直在寻找的。这将使我所有的JS变得更加容易!任何想法,我似乎只会得到未定义的
产品
&
相关产品