在猫鼬中使用诺言

时间:2019-01-24 11:52:55

标签: express mongoose promise

我对用于同时检索多个数据库记录的Promise方法并不熟悉,我想重写现有代码以使用Promise

我在Express中有这段代码:

getController.getData = function(req,res, collection, pagerender) {
  var id = req.params.id;
  collection.find({}, function(err, docs){
    if(err) res.json(err);
    else res.render(pagerender, {data:docs, ADusername: req.session.user_id, id: req.params.id});
    console.log(docs);
  });
};

现在,我想在此处使用Promise,因此可以对数据库进行更多查询。有人知道我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

首先,检查collection.find({})是否返回承诺。如果是这样,那么您可以像下面这样调用代码:

collection.find({}).
    then(function(docs){
        res.render(pagerender, {data:docs, ADusername: req.session.user_id, id: req.params.id});
    })
    .catch( function(err) {
        res.json(err);
    })

如果您要在此处进行更多调用,只需创建新的数据库调用并添加另一个.then块即可。

我建议您阅读有关承诺的文档,只是为了大致了解它们(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then)。如果需要,您还将看到如何在同一函数中处理成功和拒绝。