promise 概念在 ruby 中可用吗?

问题描述 投票:0回答:4

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

ruby-on-rails ruby es6-promise method-chaining
4个回答
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 

0
投票

首先引入 Promise 的 JavaScript 也是同步的,Promise 是最严格意义上的回调的抽象

Ruby 有一些并发库,其中一些库在一定程度上体现了 Promises 的精神,谷歌搜索

promise.rb
会得到一些有希望的结果:

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

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


0
投票

据我所知,

promise.rb
是遵守 js Promise/A+ 标准的异步机制中最常用的 gem。

这篇文章很好地介绍了它:https://medium.com/@gauravbasti2006/lets-keep-our-promise-in-ruby-e45925182fdc


0
投票
与其他广泛使用的语言类似,

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

© www.soinside.com 2019 - 2024. All rights reserved.