承诺概念是否可用于红宝石?

时间:2018-06-12 14:07:41

标签: ruby-on-rails es6-promise method-chaining

我只是想知道,红宝石中是否存在链接概念。 我想一个接一个地执行一系列异步任务或方法。有可能吗?

谢谢, 拉维

3 个答案:

答案 0 :(得分:1)

您可能想要创建一个流程类,例如:

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 

答案 1 :(得分:0)

最初引入Promises的Javascript也是同步的,它在最严格的意义上保证是对回调的抽象

有用于Ruby的并发库,其中一些库在一定程度上体现了Promises的精神,谷歌搜索pod install会产生一些有希望的结果:

https://github.com/lgierth/promise.rb https://github.com/ruby-concurrency/concurrent-ruby

也许这些不是惯用的红宝石,但它们确实提供了一些有用的范例

答案 2 :(得分:0)

据我所知,promise.rb是遵循js Promise / A +标准的异步机制最常用的宝石。

本文在介绍它方面做得不错:https://medium.com/@gauravbasti2006/lets-keep-our-promise-in-ruby-e45925182fdc