【发布时间】:2015-02-15 06:18:10
【问题描述】:
TL;DR 如何从client.ttl 回调中获取返回值,以便在getTTL 函数之外使用?
在这里使用 Hubot 和 Redis 学习 Coffeescript。我有一个函数没有返回我期望的值。此处的函数旨在获取 Redis 键的 TTL 并返回 TTL 值,例如4000(秒)。这是我的 Coffeescript:
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;
}
});
};
来自coffeescript return function callback acting strange,我了解需要添加空的return,但我仍然没有收到回调回复中的值。如果我将该函数与 Hubot 中的 Response object 集成,我可以执行 msg.send reply 并且可以很好地输出返回值。
但是,如果我将函数的返回值分配给变量,例如ttl_val = getTTL "some-key",然后我只返回一个布尔值 (true),我假设它是 getTTL 函数本身的退出状态。所以,我的问题是:
我做错了什么导致我无法在回调函数中接收回复值?我是否需要执行How do I wait for a callback in coffeescript (or javascript)? 之类的操作以确保我的回调在尝试拉取值之前完成?
【问题讨论】:
-
我找到了使用不同方法解决我的核心问题的方法,但我仍然对我遇到的这个特殊问题感兴趣......
标签: javascript node.js coffeescript redis hubot