如何使用 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'
    });
}

所以我首先处理(通过多个小步骤)检索数据和存储一些信息所需的操作。 在最后一步,我可以对数据进行一些修改,将其放入一个结构中(在模板引擎中更容易处理,并且与我拥有的每条路线保持一致)。

对我来说,这是最有效的解决方案。