node / express / mongooseを使用してサイトを構築していますが、送信を表示するときに次のことを行う必要があります。
私が遭遇している問題は、非シリアル方式でdbフェッチを実行することです。たとえば、いくつかのデータをフェッチするためにいくつかの呼び出しを実行しますが、実行コンテキストが他のコンテキストに移動するまで、いくつかの呼び出しが終了しない場合があります。npmモジュールasyncを使おうとしましたが、どのように統合するかを理解するのに問題があります。
これが私のコードです:
var getViewCount = function(submissionId) {
Submission.getSubmissionViewCount({
submissionId : submissionId
}, function(err, count) {
if (err) {
throw err;
}
if (count) {
return count;
}
});
};
var getVotes = function(submissionId) {
console.log('getvotes');
Submission.getSubmissionVotes({
submissionId : submissionId
}, function(err, votes) {
return votes;
});
};
var getSubmission = function(id) {
Submission.getSubmission({
id : id
}, function(err, submission) {
if (err) {
throw err;
}
if (submission) {
return submission;
}
});
};
var renderSubmission = function(title, submission, views) {
res.render('submission', {
title: submission.title + ' -',
submission: submission,
views: views.length
});
};
これを非同期で使用するにはどうすればよいですか?または、async.series
isntead ofを使用する必要がありasync.async
ますか?
async.series([
function(callback) {
var submission = getSubmission(id);
callback(null, submission);
},
function(callback) {
// getViewCount(submissionId);
},
function(callback) {
// getVotes(submissionId);
},
function(callback) {
//renderSubmission(title, submission, views);
}
], function(err, results) {
console.log(results);
});
基本的に、最初にビューと投票を取得してから、送信をレンダリングしたいと思います。