从另一个Task调用Volt Framework Task方法

时间:2015-08-17 17:09:24

标签: voltrb

我有一个Volt Framework Task,用于检查和存储目录上的信息,例如

class DirectoryRearrangerTask < Volt::Task
    dir_contents = DirectoryHelperTask.list_contents()
end

我想从一个不同的任务来称呼它,例如

DirectoryHelperTask.list_contents().then do |r|
    dir_conents = r
end.fail do |e|
    puts "Error: #{e}"
end

上面的代码(DirectoryRearranger)和promise调用

一样会抛出错误
<span>

无法找到从Volt Framework文档中的其他任务调用任务的方法。

非常感谢!

2 个答案:

答案 0 :(得分:0)

从我收集的内容来看,任务意味着在服务器端运行,然后在客户端调用,因此使用promise对象。 promise对象来自OpalRb,因此尝试从MRI调用它不会起作用。如果你有一个&#34;任务&#34;这只会在服务器端使用,但它并不适合Volt的任务概念。

问题的第一种方法确实有效,但DirectoryRearrangerTask无法继承Volt::Task

directory_helper_task.rb

require_relative "directory_rearranger_task"

class DirectoryHelperTask < Volt::Task
  def list_contents
    contents = []
    Dir.glob("*").each do |file|
      contents << file
    end

    DirectoryRearrangerTask.rearrange(contents)

    contents
  end
end

directory_rearranger_task.rb

class DirectoryRearrangerTask
  def self.rearrange(contents)
    contents.reverse!
  end
end

Here is a GitHub repo我解决了这个问题。

答案 1 :(得分:0)

您可以从客户端或服务器调用任务,但请记住,您在类上调用实例方法。 (所以他们像单身人士一样对待)并且所有方法都返回Promise。我认为你的问题是你在课堂上做dir_contents = DirectoryHelperTask.list_contents()。虽然你可以用红宝石做到这一点,但我不确定你想要什么。

此外,在你执行dir_contents = r的情况下,除非在块之前定义了dir_contents,否则它将在块中定义。