我正在研究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?
由于
答案 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);
}
)
});