在NodeJS中查询多个数据库调用

时间:2018-02-13 04:53:43

标签: javascript node.js

我正在研究JS路由处理程序。基本上,当用户点击按钮时,它会跳转到下一页,其中包含他可以查看的信息和设备。

router.get('/userManagement/:id', function(req,res){
  var idNumber = req.params.id;
  var registeredDevices = dbAPI.registeredDevices(true);
  dbAPI.getInfoUser(idNumber).then(function(ret){
    console.log(ret);
    console.log(registeredDevices);
    res.render('userManagement.njk', {obj: ret});
  })
});

ret返回用户信息的JSON,console.log确实正确显示JSON文件,但registeredDevices显示为Promise对象。这是为什么?我怎么能从该函数调用中获取JSON?

由于

1 个答案:

答案 0 :(得分:2)

我确定这个问题与某些内容重复,但要找到正确的问题会很痛苦。

以下是在并行查询时如何获得两个结果:

router.get('/userManagement/:id', function(req,res){
  var idNumber = req.params.id;
  Promise.all([
    dbAPI.registeredDevices(true),
    dbAPI.getInfoUser(idNumber)
  ])
  .then(
    ([registeredDevices,userInfo])=>{
      console.log(userInfo);
      console.log(registeredDevices);
      res.render('userManagement.njk', {registeredDevices,userInfo});  
    }
  )
  .catch(
    err=>{
      console.warn("something went wrong:",err);
      res.status(500).send(err);
    }
  );
});

如果您希望getInfoUser等待registeredDevices完成它,请看起来像这样:

router.get('/userManagement/:id', function(req,res){
  var idNumber = req.params.id;
  dbAPI.registeredDevices(true)
  .then(
    registeredDevices=>
      dbAPI.getInfoUser(idNumber)
      .then(
        ret=>[registeredDevices,ret]
      )
  )
  .then(
    ([registeredDevices,userInfo])=>{
      console.log(userInfo);
      console.log(registeredDevices);
      res.render('userManagement.njk', {registeredDevices, userInfo});
    }
  )
  .catch(
    err=>{
      console.warn("something went wrong:",err);
      res.status(500).send(err);
    }
  )
});