在我的expressJS应用程序中,我尝试使用thennable按顺序运行2个异步promise返回函数。
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可以“一个接一个”执行,因为我已使用thenable将它们链接在一起。有两个日志语句,一个在连接之前,一个在连接之后。如果一切顺利,我应该会看到这样的日志...
连接到Redis缓存@localhost:6379 [确定]
同步到数据库... [确定]
计费服务器启动成功!
但是显示混乱了,我看到了类似的东西。
正在连接到Redis缓存@localhost:6379正在同步到数据库...
[ 好 ]
计费服务器启动成功!
[ 好 ]
我期望conenct2Redis fn中的日志语句应该被打印而不会被connect2db的日志打断,因为第二个fn是在connect2Redis完成后调用的,使用then(...)
我在这里缺少什么吗?
最佳答案
您需要传递对该函数的引用,而不是调用该函数
connect2Redis(config.cache)
.then(connect2db)