gpt4 book ai didi

Ruby EventMachine 和函数

转载 作者:IT王子 更新时间:2023-10-29 06:08:11 26 4
gpt4 key购买 nike

我正在使用合适的 Redis EM gem(在我的例子中为“em-hiredis”)读取 EventMachine react 器循环中的 Redis 集,并且必须检查某些 Redis 集是否包含级联中的成员。我的目标是获取不为空的集合的名称:

require 'eventmachine'
require 'em-hiredis'

def fetch_queue
@redis.scard('todo').callback do |scard_todo|
if scard_todo.zero?
@redis.scard('failed_1').callback do |scard_failed_1|
if scard_failed_1.zero?
@redis.scard('failed_2').callback do |scard_failed_2|
if scard_failed_2.zero?
@redis.scard('failed_3').callback do |scard_failed_3|
if scard_failed_3.zero?
EM.stop
else
queue = 'failed_3'
end
end
else
queue = 'failed_2'
end
end
else
queue = 'failed_1'
end
end
else
queue = 'todo'
end
end
end

EM.run do
@redis = EM::Hiredis.connect "redis://#{HOST}:#{PORT}"

# How to get the value of fetch_queue?
foo = fetch_queue
puts foo
end

我的问题是:如何告诉 EM 返回“fetch_queue”中“queue”的值以在 react 器循环中使用它? fetch_queue 中的简单“return queue = 'todo'”、“return queue = 'failed_1'”等会导致“意外返回 (LocalJumpError)”错误消息。

最佳答案

为了调试的热爱,请使用更多方法,你不会像这样分解其他代码,对吗?

无论如何,这基本上就是您可能想要做的,因此您可以分解和测试您的代码:

require 'eventmachine'
require 'em-hiredis'

# This is a simple class that represents an extremely simple, linear state
# machine. It just walks the "from" parameter one by one, until it finds a
# non-empty set by that name. When a non-empty set is found, the given callback
# is called with the name of the set.
class Finder

def initialize(redis, from, &callback)
@redis = redis
@from = from.dup
@callback = callback
end

def do_next
# If the from list is empty, we terminate, as we have no more steps
unless @current = @from.shift
EM.stop # or callback.call :error, whatever
end

@redis.scard(@current).callback do |scard|
if scard.zero?
do_next
else
@callback.call @current
end
end
end

alias go do_next

end

EM.run do
@redis = EM::Hiredis.connect "redis://#{HOST}:#{PORT}"

finder = Finder.new(redis, %w[todo failed_1 failed_2 failed_3]) do |name|
puts "Found non-empty set: #{name}"
end

finder.go
end

关于Ruby EventMachine 和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com