我正在尝试调用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");
}
答案 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
}
函数。有关详细信息,请参阅此处: