如何在猫鼬中使用promises

时间:2016-10-17 06:35:42

标签: node.js mongodb mongoose

通过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": []
  }`

我不确定为什么我的数据是空的,有人可以建议帮助......

1 个答案:

答案 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});
        });
    }
}