无法操纵猫鼬查询结果-答应未定义

时间:2020-09-03 22:48:23

标签: node.js express mongoose promise mean-stack

我是猫鼬和诺言的新手,所以可能是我不清楚的东西,这是东西:

我正在编写我的应用程序(MEAN),其中在控制器中堆叠了一些Web服务,以检索和获取内容。我会举一个例子。

exports.allowanceCheck = (req, res) => {

  let payload = req.body.excelparam
  let day = getDate(payload[0].data_accesso,1)
  var dummyVar

   return AccessList.aggregate([
    {'$match' : {'id': day}},
    {'$unwind' : '$employees'},
    {
      $group: {
        _id: '$id',
        count: { $sum: 1 }
      }
    }
   ])
  .exec()
  .then((list) => {
    console.log(list) //not working
    res.json(list)
    dummyVar = list
  })
  .catch((err) => {
    res.status(500).send(err)
    
  })

}
console.log(list) //not working
console.log(dummyVar) //not working

Web服务运行正常,客户端获取响应JSON:

[
    {
        "_id": "200830",
        "count": 2
    }
]

我现在遇到的问题是,如果我想对这个“列表” JSON数据进行操作,则会收到一个错误,我试图操纵{undefined}东西。 (例如,您看到的所有//不起作用的地方-可能还有其他地方) 因此,我只能将数据发送回去,而无法进行任何操作。

我试图保存并访问诺言,但没有用。

我在做什么错了?

谢谢! :)

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法以更好地理解承诺

    exports.allowanceCheck = (req, res) => {

    let payload = req.body.excelparam
    let day = getDate(payload[0].data_accesso, 1)

    functionAllowanceCheck(day).then((listResponse) => {
        console.log(listResponse) //working
        res.json(listResponse)
    }).catch((listError) => {
        res.status(500).send(listError)
    })

}

const functionAllowanceCheck = (day) => {
    return new Promise((resolve, reject) => {
        AccessList.aggregate([
            { '$match': { 'id': day } },
            { '$unwind': '$employees' },
            {
                $group: {
                    _id: '$id',
                    count: { $sum: 1 }
                }
            }
        ]).exec((err, list) => {
            if (err) {
                reject(err)
            } else {
                resolve(list)
            }
        })
    })
  }

答案 1 :(得分:0)

@vishalpankhaniya不幸的是,(:无法在块外读取它。 我尝试在块内和块前创建一个var,并且它不会改变(让我们不应该在整个allowanceCheck上正常工作,对吧?)

exports.allowanceCheck = (req, res) => { 
   ... 
   var lista = JSON.parse(JSON.stringify(listResponse)) 
   ... 
   }).catch((listError) => { 
      res.status(500).send(listError) 
   }) 
console.log(lista) }