如何使用 Promise 中的数据
How to work with data from a Promise
我是 JavaScript 的新手,目前无法完全理解 Promise 以及如何从中检索数据。
我正在使用 Express 和 Objection 并且有一条路线我想从数据库中提取一些数据并将其传递给 express' res.render() 函数。
所以我进行了大量搜索,发现的示例很少,但我无法将找到的内容整合到我的应用程序中。
//search.js ... boilerplate stripped
router.all('/', function (req, res, next)
{
Equipment.query().select().then(equip =>
{
return equip;
});
res.render('search/search', {title: 'Search', data: {formdata: req.body, equipment: "equipmentdata here"}});
});
module.exports = router;
有人能指出我正确的方向吗?
我确实明白我无法像从函数调用中获取数据那样从 Promise 中获取数据。我也无法想象不可能使用这个 ORM 工具(它似乎只适用于 Promises)并从数据库中检索数据并将其输出给用户。 (是的,我查看了 Objection Example,但这并没有使用视图。)
我想通了。
可能不是最好的解决方案,但我决定分享我的想法。也许有人遇到了同样的问题。
首先:
我定义了路由和一组函数来处理特定部分:
router.post('/', getRealEstateEquipment, getRealEstate, saveSearch, renderSearchresultPage);
第二个:
作为每个函数,我使用提供的函数参数(我的每个函数都有)将检索到的数据存储在请求实例中。
Real_Estate_Equipment // Objection model instance
.query()
.then(data =>
{
// get the data and store it
req.real_estate_equipment = data;
return next();
})
.catch(err =>
{
return next(err);
});
有人可能会争论将其存储在响应或请求实例中是否更好。
第三名:
路由的最后一个函数处理用户获得的内容(重定向/呈现)。
function renderSearchresultPage(req, res, next)
{
res.render('search/search', {
data: {
equipments: req.real_estate_equipment,
result: req.real_estate,
formdata: req.body
},
title: 'Searchresults'
});
}
所以我首先处理(通过多个小步骤)检索数据和存储一些信息所需的操作。
在最后一步,我可以对数据进行一些修改,将其放入一个结构中(在模板引擎中更容易处理,并且与我拥有的每条路线保持一致)。
对我来说,这是最有效的解决方案。
我是 JavaScript 的新手,目前无法完全理解 Promise 以及如何从中检索数据。 我正在使用 Express 和 Objection 并且有一条路线我想从数据库中提取一些数据并将其传递给 express' res.render() 函数。
所以我进行了大量搜索,发现的示例很少,但我无法将找到的内容整合到我的应用程序中。
//search.js ... boilerplate stripped
router.all('/', function (req, res, next)
{
Equipment.query().select().then(equip =>
{
return equip;
});
res.render('search/search', {title: 'Search', data: {formdata: req.body, equipment: "equipmentdata here"}});
});
module.exports = router;
有人能指出我正确的方向吗? 我确实明白我无法像从函数调用中获取数据那样从 Promise 中获取数据。我也无法想象不可能使用这个 ORM 工具(它似乎只适用于 Promises)并从数据库中检索数据并将其输出给用户。 (是的,我查看了 Objection Example,但这并没有使用视图。)
我想通了。 可能不是最好的解决方案,但我决定分享我的想法。也许有人遇到了同样的问题。
首先: 我定义了路由和一组函数来处理特定部分:
router.post('/', getRealEstateEquipment, getRealEstate, saveSearch, renderSearchresultPage);
第二个: 作为每个函数,我使用提供的函数参数(我的每个函数都有)将检索到的数据存储在请求实例中。
Real_Estate_Equipment // Objection model instance
.query()
.then(data =>
{
// get the data and store it
req.real_estate_equipment = data;
return next();
})
.catch(err =>
{
return next(err);
});
有人可能会争论将其存储在响应或请求实例中是否更好。
第三名: 路由的最后一个函数处理用户获得的内容(重定向/呈现)。
function renderSearchresultPage(req, res, next)
{
res.render('search/search', {
data: {
equipments: req.real_estate_equipment,
result: req.real_estate,
formdata: req.body
},
title: 'Searchresults'
});
}
所以我首先处理(通过多个小步骤)检索数据和存储一些信息所需的操作。 在最后一步,我可以对数据进行一些修改,将其放入一个结构中(在模板引擎中更容易处理,并且与我拥有的每条路线保持一致)。
对我来说,这是最有效的解决方案。