通过runnig下面的代码,我可以看到我的控制台中的值,但我得到的响应是空的,我认为它可能是因为承诺....
我的代码,
exports.getcatlist = function(req, res) {
var params = req.params,
item = {
'status': '1',
'type': 'categories'
};
Categories.find(item,function (err, result) {
if (err) {
return
}
if (result) {
var profiles = [];
var categories_to_get = []
var categories = []
for (var i in result) {
var id = result[i]._id;console.log(id)
var id = id.toString();
categories_to_get.push(get_category(id, profiles))
}
Promise.all(categories_to_get)
.then(() => {
console.log('final vals'+categories_to_get)
res.json({status: 'success', data: profiles});
})
} //end of if loop
else {
response = {
status: 'fail',
data: []
};
}
})
function get_category(id, profiles) {
var profiles = [];
return new Promise(function (resolve, reject) {
var item = {
'categoryid' : id,
'status': '1',
'type': 'topics',
};
Categories.count(item,function (err, result) {
if (err) {
reject(err)
return
}
if (result == []) {
profiles.push(result)
resolve()
}
if (result) {
profiles.push(result)
resolve()
} else {
reject()
}
});
})
}
}
通过runnig上面的代码,我可以看到我的控制台中的值,但我得到的响应是空的
`{
"status": "success",
"data": []
}`
我不确定为什么我的数据是空的,有人可以建议帮助......
答案 0 :(得分:0)
很抱歉,但您的代码非常混乱,这里有解决方案和干净的方法,我强烈建议您使用async
库来完成您尝试的事情。
//npm install async --save
var async = require('async');
exports.getcatlist = (req, res) => {
var params = req.params;
Categories.find({
status: '1',
type: 'categories'
}, (err, result) => {
if(err)
return res.json({status: 'fail'});
var profiles = [];
async.each(result, (id, cb) => {
Categories.count({
categoryid: id,
status: '1',
type: 'topics'
}, (ierr, val) => {
if(ierr)
return cb(ierr);
profiles.push(val);
cb();
});
}, (eachError) => {
if(eachError)
return res.json({status: 'fail'});
res.json({status: 'success', data: profiles});
});
}
}