迭代sequelize查询结果集(Hapijs)

时间:2016-03-24 07:46:49

标签: javascript sequelize.js hapijs

我有一个返回结果的代码。 Normaly当我收到这个结果时,我将它发送给客户端,并将其转换为纯JSON对象。

但现在我需要对该结果集执行一些操作,然后在数据库中进行另一次查找。

我不理解的是结果集的结构。我如何正确地迭代它。我可以使用for循环手动提取值,但我感觉不是这样做的。

这是返回结果的代码:

 models.Results.findAll({
            where: {ProjectId: projectId}
        })
        .then(function (resultset) {              
            //How do I properly iterate over the resultset
            for(p in resultset){

                var a = p;
                var something;

            }


            reply(resultset).code(200);
        }, function (rejectedPromiseError) {
            reply(rejectedPromiseError).code(401);
        });

图像显示调试模式下的结果。它有4个对象:enter image description here

3 个答案:

答案 0 :(得分:10)

使用model.findAll时,返回的resultset是一个model Instance objects数组。如果你想获得有趣的东西(表中的实际值),你可以迭代resultset并在每个项目上调用get function,传递一个值为{{1的选项对象}}。

plain: true

答案 1 :(得分:1)

您要避免forEach操作,因为NodeJS在单个线程上运行。这很棒,因为它迫使我们进行不同的编码。可以想象一下,因为forEach是贪婪的同步操作,所以在forEach运行时它会占用CPU。我们需要共享资源,并始终考虑并行运行。

http://bluebirdjs.com/docs/api/promise.each.html

“在一个数组或数组的promise上进行迭代,其中包含promise(或promise和值的混合)以及给定迭代器函数的签名(值,索引,长度),其中value是被解析的值输入数组中的相应诺言。迭代串行发生。如果迭代器函数返回诺言或可忍受,则 然后等待诺言的结果,然后继续下一次迭代 。如果输入数组中的任何promise被拒绝,那么返回的promise也将被拒绝。”

从本质上讲,此代码等待上一条记录被检索,然后再继续下一条记录。因此,CPU越快,输出越快。

notification.sendAll = (message, cb) => {
    db.models.users.findAll().then(users => {
        db.Promise.each(users, user => {
            console.log('user id: ' + user.id)
            notification.sendMessage(message, ret => {
            })
            return
        })
    })
}

答案 2 :(得分:0)

await Request.findAll({
         where: {
             S_Id: 13, 
             Customer_Id:req.body.Customer_Id,
         }
     }).then(function (results) {
         res.send(results[0]["CardNumber"])
         quitFunction.status =true;

从续集返回的JSON对象

[
    {
        "id": 1,
        "S_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-02T19:16:35.000Z",
        "updatedAt": "2019-04-02T19:24:41.000Z"
    },
    {
        "id": 2,
        "S_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-02T19:24:48.000Z",
        "updatedAt": "2019-04-02T19:35:26.000Z"
    },
    {
        "id": 3,
        "ServicAction_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-02T19:39:40.000Z",
        "updatedAt": "2019-04-04T20:03:52.000Z"
    },
    {
        "id": 4,
        "ServicAction_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-04T20:08:11.000Z",
        "updatedAt": "2019-04-04T20:08:11.000Z"
    },
    {
        "id": 5,
        "ServicAction_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-05T18:53:34.000Z",
        "updatedAt": "2019-04-05T18:53:34.000Z"
    },
    {
        "id": 6,
        "S_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-05T18:54:32.000Z",
        "updatedAt": "2019-04-05T18:54:32.000Z"
    },
    {
        "id": 7,
        "S_Id": 13,
        "Customer_Id": 4,
        "CardNumber": 345345,
        "createdAt": "2019-04-05T18:54:57.000Z",
        "updatedAt": "2019-04-05T18:54:57.000Z"
    } ]