在我的expressJS应用程序中,我正在尝试使用thennable在序列中运行2异步承诺返回函数...
connect2Redis(config.cache)
.then(connect2db())
.then(function() {
console.log("Accounting Server started successfully!");
})
})
.catch(function(e){
console.error("Failed to start Accounting server. Error: ", e);
})
两个fns' connect2Redis'和' connect2db'实施如下:
function connect2Redis(opts) {
var connectingMsg = "Connecting to Redis Cache @" + config.cache.host + ":" +config.cache.port;
process.stdout.write(connectingMsg);
return new Promise(function(resolve, reject){
var redisClient = redis.createClient(opts);
redisClient.on('ready', function(){
console.log(" [ " + "OK".green + " ]");
return resolve(redisClient);
})
redisClient.on('error', function(e){
console.log("[" + "FAIL".red + "]");
return reject(e);
})
});
}
function connect2db() {
process.stdout.write("Synchronizing to database...");
return DB.sequelize.sync().then(function() {
console.log(" [ " + "OK".green + " ]");
}).catch(function(e) {
console.log("[" + "FAIL".red + "]");
return e;
});
}
我期待两个fns一个接一个地执行"因为我用thennable链接了它们。连接前有一个日志语句,连接后有一个日志语句。如果一切顺利,我应该看到这样的日志......
连接到Redis缓存@localhost:6379 [确定]
同步到数据库... [确定]
Accounting Server已成功启动!
但是显示器混乱了,我看到了类似的东西。
连接到Redis缓存@localhost:6379同步到数据库... [确定]
Accounting Server启动成功!
[确定]
我期待conenct2Redis fn中的日志语句应该被打印而不会被来自connect2db的日志中断,因为在完成connect2Redis之后调用第二个fn,然后使用then(...)
我在这里缺少什么?
答案 0 :(得分:2)
您需要传递对函数的引用,而不是调用函数
connect2Redis(config.cache)
.then(connect2db)