【问题标题】:Is promise concept available in ruby?Ruby 中是否有 promise 概念?
【发布时间】:2018-06-12 14:07:40
【问题描述】:

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

谢谢, 拉维

【问题讨论】:

  • Ruby 本质上是同步的。所以,不,“承诺概念”(我假设你指的是 JS 承诺概念)在 ruby​​ 中不是“可用的”。是否可以让一系列异步任务按指定顺序执行,每个任务仅在前一个任务完成时执行?是的。
  • 早上好 Jvillian,非常感谢。你能请吗?帮助我理解,如何在 ruby​​ 中执行一系列 asnc 任务?

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


【解决方案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 

【讨论】:

    【解决方案2】:

    最初引入 Promises 的 Javascript 也是同步的,Promise 是最严格意义上的回调抽象

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

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

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

    【讨论】:

      【解决方案3】:

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

      这篇文章的介绍做得不错:https://medium.com/@gauravbasti2006/lets-keep-our-promise-in-ruby-e45925182fdc

      【讨论】:

        猜你喜欢
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        相关资源
        最近更新 更多