【问题标题】:run mongoose methods synchronously in node.js在 node.js 中同步运行 mongoose 方法
【发布时间】:2017-03-20 15:15:25
【问题描述】:

我正在尝试在我的 Marchandise 路由器中调用 getMarchandiseList() 方法,该方法调用一个 mongoose 方法“find({})”。 问题是当我发送响应时,我发现在 find({}) 方法发送结果之前我得到了一个 result=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");

}

【问题讨论】:

  • 发布代码,不是代码截图
  • @SergioTulentsev 当人们在这里发布屏幕截图时,我总是很惊讶。复制和粘贴代码比发布屏幕截图要容易得多,但是他们不遗余力地以唯一没有人可以修复的形式发布他们的代码。我想我什至在一两年前都没有看到过发布屏幕截图,现在每个人都在这样做,我想知道为什么。
  • @rsp:有很多非常易于使用的截图工具。你按下一个按钮/热键,然后 -bam- 你有一个带有截图的 URL,已经在你的剪贴板中。
  • 感谢您的建议,这对我来说是第一次,所以我不知道发布问题的正确方法

标签: node.js mongodb


【解决方案1】:

您不能同步运行 mongoose 方法。但是,如果您使用的是现代版本的 Node,那么您可以让它看起来好像是异步运行的。

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

使用普通的承诺:

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
}

第二个例子只能用在async 函数中。有关详细信息,请参阅此内容:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多