我有一个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文档中的其他任务调用任务的方法。
非常感谢!
答案 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,否则它将在块中定义。