В режиме «просмотра» в моем контроллере ранее использовался node-async
, но я хотел попробовать, используя q
.Как преобразовать этот код node.async в использование q? Нужно ли мне возвращать обещание?
В настоящее время я пытаюсь преобразовать этот
exports.view = function (req, res) {
var category = req.params.category,
id = req.params.id,
ip = req.connection.remoteAddress,
slug = req.params.slug,
submission,
userId = typeof req.session.user !== 'undefined' && req.session.user.id ? req.session.user.id : null,
views;
var getSubmission = function (submissionId, callback) {
Submission.getSubmission({
id: submissionId
}, function (err, submission) {
if (err) {
callback(err);
} else if (submission) {
callback(null, submission);
} else {
callback(err);
}
});
};
async.waterfall([
function (callback) {
getSubmission(id, callback);
},
function (submission, callback) {
res.render('submission', {
title: submission.title + ' -',
submission: submission
});
}]);
Для использования д ... Я начал делать что-то вроде:
var getSubmission = function(id) {
return Submission.getSubmission({
id : submissionId
}).then(function(submission) {
return submission;
});
};
q.fcall(getSubmission).then(function(submission) {
console.log(submission);
});
Но это не совсем работает, как я предполагал. Я здесь что-то не так? Как я могу это сделать?
Плохой человек-помощник спасибо. Нужно ли мне создавать новую отложенную в рамках каждой области? Как если бы я связал другой вызов, чтобы что-то сделать с представлением вроде getSubmissionViews, я создаю новый отложенный в этой области? Или передать ему первый? –
Если все ваши асинхронные функции всегда возвращают одну и ту же подпись ('function (err, data)'), вы можете использовать 'getSubmissionAsPromise = Q.denodeify (Submission.getSubmission); getSubmissionAsPromise ({id: 123}), затем (successCallback, errorCallback); '. –
Но скажу, что я использовал denodeify и в моем 'then' хотел вызвать getCommentsAsPromise ({submissionId: submission._id}), но вы можете видеть, что я бы использовал идентификатор отправки из возвращаемого объекта из первого denodeify, как бы я сделал что? Ака .. держи целую цепочку –