1
我试图使用async waterfall method,但是当它到达其中一个函数时,它会挂起。我怀疑这是因为save()操作对于执行上下文来说太慢了,但这就是为什么我开始使用异步的瀑布,所以我可以等待返回的值直到它进入系列中的下一个函数(传递正确的数据与它在我的情况下将是counted
)。调用猫鼬时async.js挂起的瀑布方法保存方法
//在我的用户控制:
async.waterfall([
function(callback) {
getSubmission(id, function(submission) {
if (submission) {
callback(null, submission);
}
});
},
function(submission, callback) {
var submissionId = submission._id;
getViews(submissionId, ip, function(count) {
if (count) {
callback(null, count, submissionId);
}
});
},
// Those top two functions work perfectly passing what
// I need to this one which is where I'm having trouble
function(views, submissionId, callback) {
// addView is called because it is actually
// inserting a row in the db, but never returns from the caller
addView(submissionId, ip, function(added) {
// this callback doesn't fire
if (added) {
callback(null, added);
}
});
},
function(added, callback) {
console.log(added);
}
]);
这是addView()
是什么(也内用户控制器,它就是以前async.waterfall
代码也为):
var addView = function(submissionId, ip, callback) {
Submission.addView({
submissionId : submissionId,
ip: ip
}, function(err, counted) {
if (err) {
throw err;
}
if (counted) {
callback(counted);
}
});
};
这是什么它在调用Submission.addView()
时调用(在我的提交模型文件中):
exports.addView = function(obj, fn) {
var ip = obj.ip,
submissionId = obj.submissionId,
submissionView = new SubmissionView(obj);
// it gets to this point
submissionView.save({
ip : ip,
submission_id : submissionId
}, function(err, counted) {
fn(err, counted);
});
};
原来我是路过的2种方法Mongoose'save()'方法,但它只需要一个,这样就可以摆脱我通过修复它的参数。 – 2013-03-26 19:51:01