在node.js中同步运行mongoose方法

时间:2017-03-20 15:15:26

标签: node.js mongodb

我正在尝试调用getMarchandiseList()方法,该方法在我的marchandise路由器中调用mongoose方法“find({})”。 问题是,当我发送响应时,我发现在find({})方法之前我得到一个结果= 0发送它的结果  //结果应该是  {id_marchandise:01,libelle_marchandise:'fer'}。

[MarchandiseDAO.js] [1]

*

var express = require("express");
var router = express.Router();
var marchandiseDAO = require ('../DAO/marchandises');
router.get('/listmarchandise',  function (req,res) {

    var marchandise  = new marchandiseDAO();
    marchandise.getMarchandiseList();
    res.send("result" +marchandise.result);

});
module.exports = router;

*

[marchandiserouter.js] [2]

 var model = require("../Models/model");

var marchandiseDAO = function () {

    console.log("get instance ");
    this.result = 0 ;

}

marchandiseDAO.prototype.getMarchandiseList = function () {

    console.log("begin");

    model.MarchandiseModel.find({},function(err,marchandiselist){

        console.log("traitement");

        if(err)  result = err;

        else  result = marchandiselist;
    });

    console.log("end");

}

1 个答案:

答案 0 :(得分:2)

您无法同步运行mongoose方法。但是如果您使用现代版本的Node,那么您可以将其显示为异步运行。

不幸的是,您发布了代码示例作为屏幕截图,这需要我使用Photoshop来修复您的代码,这显然不值得麻烦。相反,我将向您展示一般解决方案。

使用正常的承诺:

this.myServiceFunction = function(){
  this.canceler = $q.defer();
  this.deferred = $q.defer();

  $http({
    method: 'GET',
    url: 'domain/myendpoint',
    timeout: this.canceler.promise   
  })
  .success(function(data){
    deferred.resolve(data);
  })
  .error(function(data){
    deferred.reject(data);
  });

  return deferred.promise;
};

this.cancelServiceFunction = function() {
  return this.canceler.resolve();
};

使用Model.find({...}).then(data => { // you can only use data here }).catch(err => { // always handle errors });

await

第二个示例只能用于try { let data = await Model.find({...}); // you can only use data here } catch (err) { // always handle errors } 函数。有关详细信息,请参阅此处: