【发布时间】:2011-10-04 03:52:45
【问题描述】:
我将 Mongoose 与 Node.js 一起使用,并且有以下代码将在所有 save() 调用完成后调用回调。但是,我觉得这是一种非常肮脏的做法,并希望看到完成此操作的正确方法。
function setup(callback) {
// Clear the DB and load fixtures
Account.remove({}, addFixtureData);
function addFixtureData() {
// Load the fixtures
fs.readFile('./fixtures/account.json', 'utf8', function(err, data) {
if (err) { throw err; }
var jsonData = JSON.parse(data);
var count = 0;
jsonData.forEach(function(json) {
count++;
var account = new Account(json);
account.save(function(err) {
if (err) { throw err; }
if (--count == 0 && callback) callback();
});
});
});
}
}
【问题讨论】:
-
这就是开发人员有时所说的“spaghetti code”。 This video tutorial from Yahoo! 解释了如何防止这种情况。我喜欢使用有助于防止意大利面条代码的库,例如 Caolan McMahon 的 async。可以在this node_modules section 找到更多信息。
-
我为此功能使用了
after函数。像这样的简单实用功能可以提供很大帮助。