我有以下代码,我想避免嵌套回调:
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有什么想法吗?
发布于 2012-11-04 22:18:48
我发现对于这类事情,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发布于 2012-11-05 07:25:01
您还可以像这样组织代码:
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);
};https://stackoverflow.com/questions/13219266
复制相似问题