首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行几个mongoose查询:如何使用promises?

执行几个mongoose查询:如何使用promises?
EN

Stack Overflow用户
提问于 2012-11-04 22:09:35
回答 2查看 2.9K关注 0票数 1

我有以下代码,我想避免嵌套回调:

代码语言:javascript
复制
app.get '/performers', (req, res) ->
    conductor = require('models/conductor').init().model
    soloist = require('models/soloist').init().model
    orchestra = require('models/orchestra').init().model
    chamber = require('models/chamber').init().model
    performers = {}
    conductor.find {}, (err, result) ->
        performers.conductor = result
        soloist.find {}, (err, result) ->
            performers.soloist = result
            orchestra.find {}, (err, result) ->
                performers.orchestra = result
                chamber.find {}, (err, result) ->
                    performers.chamber = result
                    res.json performers

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-04 22:18:48

我发现对于这类事情,async库是一个比承诺的更干净的解决方案。对于这个特定的情况,async.parallel会工作得很好。

我对coffeescript不是很熟悉,但它看起来像这样:

代码语言:javascript
复制
performers = {}
async.parallel [
    (callback) ->
        conductor.find {}, (err, result) ->
            performers.conductor = result
            callback err
    (callback) ->
        soloist.find {}, (err, result) ->
            performers.soloist = result
            callback err
    (callback) ->
        orchestra.find {}, (err, result) ->
            performers.orchestra = result
            callback err
    (callback) ->
        chamber.find {}, (err, result) ->
            performers.chamber = result
            callback err
    ], (err) ->
        res.json performers
票数 5
EN

Stack Overflow用户

发布于 2012-11-05 07:25:01

您还可以像这样组织代码:

代码语言:javascript
复制
exports.index = function(req, res){
    var _self = {};

    var foundItems = function(err, items){
      _self.items = items;
      res.render('index', { user: _self.user, items: _self.items, lists: _self.lists });
    };

    var foundLists = function(err, lists){
      _self.lists = lists;
      Items.find().exec(foundItems);
    };

    var foundUser = function(err, user){
      _self.user = user;
      List.find().exec(foundLists);
    };

    User.findById(user).exec(foundUser);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13219266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档