我有以下的代码,我想避免嵌套的回调:
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
有任何想法吗?
我觉得async
库比应许这样的事情一个清晰的解决方案。 对于这个特定的情况下, async.parallel
将工作做好。
我不是太熟悉的CoffeeScript,但它会是这个样子:
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
您也可以组织这样的代码:
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);
};