【发布时间】:2017-12-21 15:16:16
【问题描述】:
我正在尝试刷新 Redis 缓存数据库并在响应中返回状态。但在缓存被清除之前,它会返回响应。
在下面的代码中,console.log() 调用将始终打印 undefined,因为不等待 flushRedisDB。
我的 Node.js 版本是 v8.1.0
文件 myfile.js
async function flushRedisapi(request, response)
{
try {
var value = await redisModules.flushRedisDB();
console.log("the value is: " + value);
if(value)
response.status(200).send({status : 'Redis Cache Cleared'});
else
response.status(400).send({status : "Redis Cache could not be flushed"});
} catch (error) {
response.status(400).send({status : "Redis Cache could not be flushed"});
}
}
文件 redismodule.js
var redisClient; // Global (avoids duplicate connections)
module.exports =
{
openRedisConnection : function()
{
if (redisClient == null)
{
redisClient = require("redis").createClient(6379, 'localhost');
redisClient.selected_db = 1;
}
},
isRedisConnectionOpened : function()
{
if (redisClient && redisClient.connected == true)
{
return true;
}
else
{
if(redisClient)
redisClient.end(); // End and open once more
module.exports.openRedisConnection();
return true;
}
},
flushRedisDB: async function()
{
if(!module.exports.isRedisConnectionOpened())
return false;
await redisClient.flushall(function (err, result)
{
return (result == 'OK') ? true : false;
});
}
};
我该如何解决这个问题?
【问题讨论】:
-
您不能将
await与节点样式回调一起使用。它只适用于承诺。 -
你能帮我把flushRedisDB函数转换成使用promises的概念吗?
-
@YuryTarabanko await redisClient.flushall 应该等待吧?
-
没有那么简单,除非它返回一个承诺:)。检查我的答案。
标签: node.js asynchronous async-await