无法操纵猫鼬查询结果 - 承诺未定义
Can't manipulate mongoose query result - promise undefined
我是 mongoose 和 promises 的新手,所以我可能不太清楚,事情是这样的:
我正在编写我的应用程序 (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} 东西。 (例如,你看到的任何地方//不工作 - 可能还有其他任何地方)
所以我只能发回数据,我不能操作任何东西。
我尝试保存承诺并访问它,但没有成功。
我做错了什么?
谢谢! :)
你可以试试下面的方法来更好的理解promise
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)
}
})
})
}
@vishalpankhaniya 不幸的是:(无法在块外阅读它。
我尝试在块内和块之前创建一个 var,但它没有改变(let 不应该在整个 allowanceCheck 上工作,对吧?)
exports.allowanceCheck = (req, res) => {
...
var lista = JSON.parse(JSON.stringify(listResponse))
...
}).catch((listError) => {
res.status(500).send(listError)
})
console.log(lista) }
我是 mongoose 和 promises 的新手,所以我可能不太清楚,事情是这样的:
我正在编写我的应用程序 (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} 东西。 (例如,你看到的任何地方//不工作 - 可能还有其他任何地方) 所以我只能发回数据,我不能操作任何东西。
我尝试保存承诺并访问它,但没有成功。
我做错了什么?
谢谢! :)
你可以试试下面的方法来更好的理解promise
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)
}
})
})
}
@vishalpankhaniya 不幸的是:(无法在块外阅读它。 我尝试在块内和块之前创建一个 var,但它没有改变(let 不应该在整个 allowanceCheck 上工作,对吧?)
exports.allowanceCheck = (req, res) => {
...
var lista = JSON.parse(JSON.stringify(listResponse))
...
}).catch((listError) => {
res.status(500).send(listError)
})
console.log(lista) }