TL;DR如何从client.ttl
回调中获取返回值以在getTTL
函数外使用?
在这里使用 Hubot 和 Redis 学习 Coffeescript。我有一个函数没有返回我期望的值。此处的函数旨在获取 Redis 键的 TTL 并返回 TTL 值,例如 4000(秒)。这是我的咖啡脚本:
getTTL = (key) ->
client.ttl key, (err, reply) ->
if err
throw err
else if reply in [-1, -2]
"No TTL or key doesn't exist."
else
reply
return
现在这里是用 JS 编译的:
var getTTL;
getTTL = function(key) {
client.ttl(key, function(err, reply) {
if (err) {
throw err;
} else if (reply === (-1) || reply === (-2)) {
return "No TTL or key doesn't exist.";
} else {
return reply;
}
});
};
从咖啡脚本返回函数回调行为奇怪,我了解需要添加空return
,但我仍然没有收到回调回复中的值。如果我将该函数与Hubot 中的Response 对象msg.send reply
集成,我可以这样做,并且可以很好地输出返回值。
但是,如果我将函数的返回值分配给一个变量,例如ttl_val = getTTL "some-key"
,那么我只会得到一个返回的布尔值 ( true
),我假设它是getTTL
函数本身的退出状态。所以,我的问题是:
我做错了什么导致我无法在回调函数中接收回复值?我是否需要做类似如何等待咖啡脚本(或javascript)中的回调?确保我的回调在尝试拉取值之前完成?