我只是想知道,Ruby 中是否有链接概念。
我想一个接一个地执行一系列异步任务或方法。可以吗?
您可能想要创建一个流程类,例如:
class MyProcess
PROCESS_STEPS = %w(
step_one
step_two
step_three
)
class << self
def next_step
new.next_step
end
end # Class Methods
#======================================================================
# Instance Methods
#======================================================================
def next_step
PROCESS_STEPS.each do |process_step|
send(process_step) if send("do_#{process_step}?")
end
end
def step_one
# execute step one task
end
def do_step_one?
# some logic
end
def step_two
# execute step two task
end
def do_step_two?
# some logic
end
def step_three
# execute step three task
end
def do_step_three?
# some logic
end
end
您可能会将其放入:
app
|- processes
| |- my_process.rb
然后,在每个任务结束时,执行以下操作:
MyProcess.next_step
首先引入 Promise 的 JavaScript 也是同步的,Promise 是最严格意义上的回调的抽象
Ruby 有一些并发库,其中一些库在一定程度上体现了 Promises 的精神,谷歌搜索
promise.rb
会得到一些有希望的结果:
https://github.com/lgierth/promise.rb https://github.com/ruby-concurrency/concurrent-ruby
也许这些不是惯用的 ruby,但它们确实提供了一些有用的范例
据我所知,
promise.rb
是遵守 js Promise/A+ 标准的异步机制中最常用的 gem。
这篇文章很好地介绍了它:https://medium.com/@gauravbasti2006/lets-keep-our-promise-in-ruby-e45925182fdc
concurrent-ruby 最广泛用于实现并发相关功能,例如 Promise。该文档也非常简单: https://github.com/ruby-concurrency/concurrent-ruby/blob/master/docs-source/promises.in.md
对于链接异步任务,您可以使用以下内容: https://github.com/ruby-concurrency/concurrent-ruby/blob/master/docs-source/promises.in.md#chaining