2

ディレクトリに関する情報をチェックして保存する Volt Framework タスクがあります。

class DirectoryHelperTask < Volt::Task
    def list_contents()
        contents = []
        Dir.glob("/path/to/files").each do |f|
            contents << f
        end
        return contents
    end
end

これを別のタスクから呼び出したいと思います。

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

上記のコード (DirectoryRearranger) は、Promise 呼び出しと同様にエラーをスローします。

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

Volt Framework のドキュメントで、別のタスクからタスクを呼び出す方法が見つかりませんでした。

どうもありがとう!

4

2 に答える 2

0

クライアントまたはサーバーからタスクを呼び出すことができますが、クラスでインスタンス メソッドを呼び出すことに注意してください。(そのため、シングルトンのように扱われます) そして、すべてのメソッドは Promise を返します。dir_contents = DirectoryHelperTask.list_contents()ここでの問題は、クラス内での行動だと思います。Rubyでこれを行うことはできますが、それがあなたが望むものかどうかはわかりません。

また、dir_contents = r を実行する場所では、ブロックの前に dir_contents が定義されていない限り、ブロック内でのみ定義されます。

于 2015-08-24T18:26:15.330 に答える
0

私が収集したものから、タスクはサーバー側で実行され、クライアント側で呼び出されることを意図しているため、promise オブジェクトが使用されます。promise オブジェクトはOpalRbから取得されるため、MRI から呼び出そうとしても機能しません。サーバー側でのみ使用される「タスク」がある場合、それは 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

これは、この問題に対する私の解決策を含む GitHub リポジトリです。

于 2015-08-22T21:41:46.013 に答える