【发布时间】:2013-12-09 21:29:04
【问题描述】:
我有一个 Node js Express 应用程序,我在其中设置来自许多不同位置(服务器、Twitter、另一个数据库等)的 cookie。这些都需要连续发生。为了避免回调噩梦,我尝试使用 Async.js。但是,在 async.series 调用完成之前会不断发送响应。如何确保 async.series 完成然后调用 res.redirect?
异步调用模块
// OTHER CODE
accountCookies(req, res, next); // THE MODULE WITH ASYNC
res.redirect(302, 'https://' + req.host + '/account');
异步模块
module.exports = function (req, res, next) {
req.appVariables.error = null;
// Required modules
var async = require(__dirname + '/utilities-----async.js'); // Utility for controlling node's asynchronous behavior
var userSessionObject = {};
// ...OTHER MODULES
// Cookie values set by the server
var cookieValuesSetByTheServer = function(req, res, next, userSessionObject, callback) {
userSessionObject.STUFF = STUFF;
logs.dev('cookieValuesSetByTheServer');
setTimeout(function(){callback(req.appVariables.error, '1');}, 3000);
};
// Cookie values from Twitter
var cookieValuesFromTwitter = function(req, res, next, userSessionObject, callback) {
userSessionObject.moreSTUFF = moreSTUFF;
logs.dev('cookieValuesFromTwitter')
callback(req.appVariables.error, '2');
};
// Cookie values from User Database
var cookieValuesFromUserDatabase = function(req, res, next, userSessionObject, callback) {
userSessionObject.otherSTUFF = otherSTUFF;
logs.dev('cookieValuesFromUserDatabase');
setTimeout(function(){callback(req.appVariables.temporarilyUnavailableCalled, '3');}, 6000);
};
// Call all functions in Series
async.series([
function(callback){
cookieValuesSetByTheServer(req, res, next, userSessionObject, callback);
},
function(callback){
cookieValuesFromTwitter(req, res, next, userSessionObject, callback);
},
function(callback){
cookieValuesFromUserDatabase(req, res, next, userSessionObject, callback);
}
], function(err, results){
if ( err == null ) {
logs.dev(results);
return true;
}
else {
logs.dev(err);
return false;
}
});
};
【问题讨论】:
标签: javascript node.js asynchronous express