2016-10-17 114 views
0

通過運行過程中出現下面的代碼,我可以看到的值我的控制檯,但我得到的迴應是空的,我thoink可能是因爲承諾....如何使用承諾在貓鼬

我的代碼,

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() 
        } 
       }); 
     }) 
    } 
} 

通過運行過程中出現上面的代碼中,我可以看到的價值觀在我的控制檯,但我得到的迴應是空

`{ 
    "status": "success", 
    "data": [] 
    }` 

我不知道爲什麼我收到我的數據,空,任何人都可以請建議幫助...

+1

您正在重新聲明型材'函數get_category(ID,配置文件){ VAR型材= [];'一次連連。爲了清晰起見,您應該使用解析值而不是參考。 –

回答

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